하.. 윈도우 설치 너무 힘들었다.... 오류..그리고 오류... 다시 오류......
낯선 MySQL과 친해지기 위해 강의를 들으며 실습한 내용을 정리해 보았다..
CREATE, ALTER, DROP 대표적인 쿼리문Snake_Case 사용;을 사용하여 명령을 마무리 해야한다$ mysql -u root -p // mySQL 시작!
CREATE DATABASE my_favorite_artists; # Database 를 생성하는 명령어
SHOW DATABASES; # 현재 MySQL 에 저장되어있는 데이터베이스를 보는 명령어
CREATE TABLE artists
(
id INT NOT NULL AUTO_INCREMENT,
# id 칼럼을 정수, NULL 을 허락하지 않으며 값을 자동증가하게 설정합니다.
name VARCHAR(100) NOT NULL,
# name 칼럼을 100의 크기를 가지는 문자열, NULL 을 허락하지 않습니다.
PRIMARY KEY (id) # 이 테이블의 Primary Key 를 id 로 설정합니다.
); # 쿼리문은 ; 로 구분되기 때문에 엔터를 쳐서 쿼리문을 멀티라인으로 작성할 수 있습니다.
CREATE TABLE <이름> : table 이름id : 칼럼INT : 데이터 타입NULL : NULL 데이터를 허용NOT NULL : NULL 데이터를 허용하지 않음VARCHAR(100) : 소괄호 안에는 허용할 수 있는 글자 수를 적음* NULL(undefined) : 데이터가 아예 안들어 왔을때
* id에는 NULL을 허용하지 않음
id INT NOT NULL AUTO_INCREMENT,
: NULL 이라는 값을 허용할 것인지 물어보는 것
값이 없는 것을 표현할 때는
ex) Phone VARCHAR(100) NOT NULL DEFAULT "", -> DEFAULT ""를 넣어줌
(= 추후 빈 string이 들어갈 수 있다)
관계형 데이터베이스에서는 NOT NULL을 하는 것이 좋다
(가끔 사용될 때도 있다 update_at 같은 경우 등등..)
NULL 이라는 값이 없는 게 자연스럽게 표현됨
▽ 테이블을 생성한 후에 항상 원하는 대로 잘 생성 되었는지 확인
DESC artists; # Description 을 축약해 놓은 명령어로써, 테이블의 정보를 보여줍니다.
💡 NULL과 DEFAULT에 모두 허용이 되어 있지 않기 때문에
💡 나중에 값을 넣어주지 않으면 오류가 날 수 있다!
CREATE TABLE songs
(
id INT NOT NULL AUTO_INCREMENT,
title VARCHAR(100) NOT NULL,
lyrics VARCHAR(2000),
artist_id INT,
PRIMARY KEY (id),
FOREIGN KEY (artist_id) REFERENCES artists (id)
# 외래키를 걸어줄 칼럼과 참조할 테이블과 칼럼을 순서대로 적어줍니다.
);
- MySQL 에 원하는 데이터베이스를 생성하는 명령어는
CREATE DATABASE {database_name};입니다.- 생성된 데이터베이스에 접근하는 명령어는
USE {database_name}입니다.- 데이터베이스 내부에 테이블을 생성하는 명령어는
CREATE TABLE {table_name} (field_names);입니다.
ALTER TABLE artists ADD COLUMN phone_number VARCHAR(20) NOT NULL DEFAULT "";
ALTER TABLE artists DROP COLUMN
(세부적인 문법은 꼭 확인해 보기 - 지금은 이런 식으로 추가하고 삭제할 수 있다는 것만 알아두자!!)
💡 COLUM 이름 변경하기
RENAME COLUMN은 이름만 바꾸는데 사용 가능CHANGE를 사용ALTER TABLE table_name RENAME COLUMN old_column_name TO new_column_name;
ALTER TABLE table_name CHANGE old_column_name new_col_name Data Type;
💡 번외 ) artists에 phone_number를 추가 & 삭제 과정!
ALTER TABLE artists ADD COLUMN phone_number VARCHAR(20) NOT NULL DEFAULT "";
DESC artists; // 확인
INSERT INTO artists (name, phone_number) VALUES ("홍길동", "010-1234-5678");
SELECT * from artists; // 확인
ALTER TABLE artists DROP COLUMN phone_number;
INSERT : 데이터 삽입UPDATE : 데이터 규칙 아래에서 수정을 할 때DELETE : 데이터 삭제 (조건이 붙거나 등등)INSERT INTO artists (name) VALUES ('Radio Head');
#INSERT INTO 뒤에는 테이블 명과 칼럼값을 소괄호로 감싸 줍니다.
#VALUES 뒤에는 실제로 넣을 값을 소괄호로 감싸주고 앞서 테이블의 칼럼을 지정한 순서대로 데이터를 넣으면 됩니다.
INSERT INTO artists (name) VALUES ('Pink Floid');
INSERT INTO artists (name) VALUES ('새소년');
🤔 ID는 왜 없을까? -> 아까 옵션(AUTO_INCREMENT)으로 주었기 때문에 쓰지 않음
INSERT INTO artists (name) VALUES ('가수명1'), ('가수명2'), ('가수명3');
# 여러개를 동시에 넣을 때
▽ 테이블 전체를 조회하는 쿼리문
SELECT * FROM artists; # * 는 와일드카드로써 테이블의 모든 칼럼을 조회하겠다는 의미와 같습니다.
▽ 여러 개의 칼럼을 넣을 때!
INSERT INTO songs (title, lyrics) VALUES ("제목", "가사");

💡 artist_id는 NULL을 허용했기 때문에 title, lyrics만 추가하여도 오류가 나지 않는다 !
테이블이름 SET 칼럼이름 = 수정할 데이터 WHERE id = 아이디번호;UPDATE artists SET name='Pink Floyd' WHERE id = 2;
# UPDATE 쿼리문은 데이터를 수정할 테이블을 기입합니다.
# 바꾸고자 하는 칼럼값에 새롭게 업데이트 할 데이터를 대입합니다.
# WHERE 문은 프로그래밍 언어의 if 문이라고 생각하면 됩니다. 조건을 주는 쿼리문 입니다.
# 이 예제에서는 id=2 즉, artists 테이블의 id가 2번인 데이터에 대해서 UPDATE를 하겠다는 의미입니다.
고유key (pk)를 사용한다DELETE FROM artists WHERE name ='새소년';
# DELETE 쿼리문은 테이블의 이름과 WHERE 문으로 조건을 걸어주면 됩니다.
-> '새소년'과 관련된 데이터들을 모두 지운다(row)
- DML은 Data Manipulation Language 의 약자로써 데이터를 조작하는 쿼리문들을 뜻 합니다.
- 테이블에 데이터를 넣을 때 사용하는 명령어는
INSERT INTO {table_name} (column1, column2, ... ) VALUES (data1-1, data1-2, ... ), (data2-1, data2-2, ... );의 형태로 사용합니다.- 이미 입력된 데이터를 수정하는 명령어는
UPDATE {table_name} SET {column_name}={new_data} WHERE {condition};입니다.- 기존에 입력되어 있던 데이터를 지우는 명령어는
DELETE FROM {table_name} WHERE {condition};입니다.
▽ DQL을 하기 앞서 앞의 aritsts와 songs 초기화
TRUNCATE songs;
TRUNCATE artists;
ERROR 1701 (42000): Cannot truncate a table referenced in a foreign key constraint (`my_favorite_artists`.`songs`, CONSTRAINT `songs_ibfk_1`)
// foreign key 때문에 -> foreign key constraint fail unset 구글 검색 -> SET FOREIGN_KEY_CHECKS=0;
SET FOREIGN_KEY_CHECKS=0;
TRUNCATE artists;
SET FOREIGN_KEY_CHECKS=1;
//초기화 완료!
* (전체, wild card) : 전체 칼럼을 선택 (다 가져옴)SELECT * FROM artists
SELECT name FROM artists;
where은 행(row)을 가져오는 것id, title, artist_id들은 열(calumn)SELECT id, title, artist_id FROM songs WHERE artist_id = 1;
SELECT id, title, artist_id FROM songs WHERE title LIKE "ALL%";
// ALL 뒤에 뭐가 있든 다 찾겠다 : 문자열 데이터를 사용해서 보여줌
-- nickname -> username
SELECT users.nickname AS username
id ~~ -> SELECT songs.id ~~ SELECT songs.id, songs.title, artists.name FROM songs JOIN artists ON songs.artist_id = artists.id;
SELECT songs.id, songs.title, artists.name FROM songs JOIN artists ON songs.artist_id = artists.id;
//FROM songs left에 있음 JOIN 뒤는 right에 있음
SELECT artists.id, artists.name, songs.title
FROM artists
JOIN songs
ON artists.id = songs.artist_id
WHERE songs.lyrics LIKE '%you%' OR songs.lyrics LIKE '%i%';
# 가사에 you 또는 i가 들어간 데이터만 조회합니다.
// where을 먼저 거치고 JOIN을 한다..!?
- DQL은 Data Query Language 의 약자로 데이터를 쿼리하는데 사용되는 SQL문을 뜻합니다.
- 기본적인
SELECT문에LIKE,WHERE를 사용하여 제한적인 조건이 적용된 데이터를 선택할 수 있습니다.JOIN문을 사용하면 서로 다른 테이블 공유하는 컬럼을 기준으로 연결된 데이터를 쿼리할 수 있습니다.
느아아아아아아~~ 어렵다~~ 🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪