👉 테이블 생성을 CLI로 작업하는 연습을 많이 해보는 게 좋다. GUI로 작업하면 편하지만 어딘가에서는 GUI로 작업할 수 없는 환경이 존재하기 때문이다.
👉 CLI 명령어를 작성한 파일을 관리를 해라. 그래야 나중에 내가 어떤 명령어를 내렸는지 확인 할 수 있다.
1. Board 스키마 생성
CREATE DATABASE Board;
USE Board;
2. 사용자 테이블생성
CREATE TABLE users (
num INT NOT NULL AUTO_INCREMENT,
name varchar(30) NOT NULL,
job varchar(100),
birth DATE,
PRIMARY KEY (num)
);
3. 사용자 데이터 삽입
INSERT INTO users (name, job, birth) values('코드둥', '병아리개발자','2000-01-01');
NULL값을 입력했을 경우
🔥INSERT INTO users (job) values('학생');
ERROR 1364 (HY000): Field 'name' doesn't have a default value
🔥INSERT INTO users (name,job) values(null, '학생');
ERROR 1048 (23000): Column 'name' cannot be null
⭐AUTO_INCREMENT_LOCK_MODE⭐
AUTO_INCREMENT 설정해놓으면 데이터 실패 시에도 카운트가 됩니다.
1,2,3 문제 없이 등록한 뒤 4번째 query 실패 후 다시 등록을 하면 4가 아닌 5가 나오게 되는 것을 확인할 수 있습니다.
4. 게시글 테이블 생성
CREATE TABLE posts(
num INT NOT NULL AUTO_INCREMENT,
title varchar(100) NOT NULL,
content varchar(2000) NOT NULL,
create_at timestamp DEFAULT current_timestamp,
update_at timestamp DEFAULT current_timestamp ON UPDATE current_timestamp,
PRIMARY KEY (num)
);
5. 게시글 데이터 삽입
INSERT INTO posts (title, content) values ('231219', 'database 공부중');
num과 create_at, update_at을 넣지 않아도 값이 나오는 이유
num의 경우에는 NULL값을 받지 않고 AUTO_INCREMENT로 설정을 해놓았기 때문에 알아서 입력이 되고
create_at과 updtate_at은 입력을 하지 않아도 default 값으로 설정을 해 놓았기 때문에 자동으로 값이 들어가는 것입니다.
6. 테이블 수정(회원번호추가하여 FK설정하기)
칼럼 추가 :
ALTER TABLE posts add user_num INT NOT NULL;
FK 설정 :
ALTER TABLE posts ADD CONSTRAINT fk_user FOREIGN KEY( user_num ) REFERENCES users(num);
👉 ALTER TABLE [테이블명] ADD CONSTRAINT [FK명] FOREIGN KEY( [FK 설정 칼럼명] ) REFERENCES [참조테이블명] ( [참조 컬럼명] );
🔥 connot add or update a child row ERROR
발생이유 : 새로운 테이블을 추가하면서 칼럼설정을 NOT NULL로 설정해 놔서 user_num에 0이 들어와 있었고, users테이블에 0번이 존재하지 않아 참조무결성(참조테이블의 PK에 해당하는 값만 받아야 함)에 어긋나 에러가 발생을 한 것이었습니다. 때문에 update로 users 테이블에 존재하는 PK 값을 넣어주었고 다시 FK 설정을 하니 해결이 되었습니다.
사용 SQL :
update posts set user_num = 1 where num = 1;
👉 FK의 MUL
MUL은 multiple의 말로 여러 행이 같은 값을 받을 수 있는 것을 말합니다.
👉 만약에 users 테이블의 회원번호에 없는 번호로 데이터를 삽입하면 어떻게 될까요?
INSERT INTO posts (title, content, user_num) values ('title', 'content', 3);
7. JOIN을 이용하여 테이블을 합쳐보자
select * from posts left join users on posts.user_num = users.num;
이때 user_num과 users 테이블의 num이 중복이 되는데요.
select
posts.num, title, content, create_at, update_at, user_num, name, job, birth
from posts left join users
on posts.user_num = users.num
'프로그래머스 데브코스 > 예제실습' 카테고리의 다른 글
[C] 평가 문제 ( 1/22 ~ 1/26 ) (0) | 2024.01.29 |
---|---|
[23.12.08] 실습 코드 (0) | 2023.12.08 |