MySQL Workbench에서 DB 테이블 만져보기
DATABASE, TABLE 생성
MySQL Workbench에서 데이터베이스들을 보고 싶다면 SHOW DATABASES; 명령을 사용하면 된다.
information_schema, mysql 등의 데이터베이스들이 나오는 것을 볼 수 있다.
CREATE DATABASES를 통해 데이터베이스를 만들고 다시 확인해보자.
"board" 데이터베이스가 생성된 모습이다.
이제 board 데이터베이스에서 테이블을 만들어보자.
CREATE TABLE users(
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(30) NOT NULL,
job VARCHAR(100),
birth DATE,
PRIMARY KEY (id)
);
id는 INT 타입이며 NOT NULL이고, AUTO_INCREMENT를 통해 값을 추가할 때마다 자동으로 증가하도록 설정해주었다.
name은 VARCHAR 타입으로 NOT NULL, job은 VARCHAR 타입으로 NULLABLE이다.
birth는 DATE 타입으로 해주었는데, MySQL에서 DATE는 시간을 포함하지 않는 YYYY-MM-DD 형식이고,
DATETIME은 시간을 포함하는 YYYY-MM-DD HH:MM:SS 형식이다.
그리고 id를 PRIMARY KEY로 설정해주었다.
CREATE TABLE posts(
id INT NOT NULL AUTO_INCREMENT,
title VARCHAR(100) NOT NULL,
content VARCHAR(2000),
created_at TIMESTAMP DEFAULT NOW(),
PRIMARY KEY (id)
);
다음으로 posts 테이블을 만들어주었다.
users테이블과 비슷하게 만들어주었는데 특이사항으로 created_at의 타입이 TIMESTAMP인 것을 볼 수 있다.
TIMESTAMP DEFAULT NOW()로 타입을 지정해주면, posts 테이블에 데이터를 추가할 때 created_at을 별도로 입력해주지 않아도 현재 날짜와 시각이 자동으로 입력되어 데이터가 추가된다.
INSERT INTO
INSERT INTO를 통해 users 테이블에 새로운 데이터를 추가해주었다.
주의해야 할 점으로 birth 부분에 "19681012"를 기입하였는데, 만약 "681012"를 기입한다면 2068년으로 인식을 한다.
따라서 자료형이 date인 경우에 연도 부분을 기입할 때 조심해야 한다.
다음으로 INSERT INTO를 통해 posts 테이블에 새로운 데이터를 추가해주었다.
특이사항으로 TIMESTAMP로 처리를 해주었던 created_at의 value를 별도로 입력하지 않았는데도 DATETIME과 같이 시각까지가 포함된 데이터가 들어가 있는 것을 볼 수 있다.
위 INSERT INTO가 실행될 때의 시스템 시간이 도장 찍히듯이 입력된 것이다.
ALTER, UPDATE
ALTER TABLE posts
ADD COLUMN updated_at DATETIME
DEFAULT NOW()
on UPDATE NOW();
만약 기존의 테이블에 새로운 컬럼을 추가하고 싶다면 "ALTER"를 사용하면 된다.
ALTER를 통해 데이터가 변경될 때마다 변경된 시각을 저장하는 updated_at 컬럼을 설정해보자.
posts 테이블에 새로운 컬럼 updated_at을 추가해주고 DEFAULT NOW() on UPDATE NOW()를 설정해주었다.
그 결과 updated_at에는 ALTER 명령을 실행한 시점의 시스템 시각이 추가된 것을 볼 수 있다.
그리고 새로운 title2를 추가했을 때 updated_at도 TIMESTAMP가 잘 추가되는 것을 볼 수 있으며
UPDATE문을 통해 데이터를 업데이트하였을 때 updated_at의 시각도 변한 것을 볼 수 있다.
ALTER TABLE posts
ADD COLUMN user_id INT;
ALTER TABLE posts
ADD FOREIGN KEY (user_id)
REFERENCES users(id);
다음으로 posts 테이블에 user_id라는 컬럼을 추가하여 uses 테이블의 id로 Foreign Key를 설정해보자.
먼저 기존 posts에는 user_id라는 컬럼이 없었으므로 추가해주고,
ADD FOREIGN KEY와 REFERENCES를 통해 Foreign Key를 설정해준다.
마지막으로 추가된 user_id를 1로 모두 설정해주었다.
UPDATE 문에서 WHERE문을 별도로 지정해주지 않으면 테이블의 모든 값이 변경된다.
JOIN
마지막으로 posts 테이블에서 글을 작성한 사용자 정보가 궁금할 때 사용할 수 있는 JOIN을 사용해보자
SELECT * FROM posts
LEFT JOIN users ON posts.user_id = users.id;
왼쪽으로 JOIN되는 LEFT JOIN을 사용하여 확인한 결과는 다음과 같다.
위와 같이 연관되어있는 테이블들의 정보를 한 눈에 보고 싶을 때는 JOIN문을 통하여 한눈에 확인할 수 있다.