Q. 게시판(num, writher, w_date, title, content)과 회원가입 (id, pwd, name, email) 테이블 만들고 서로 참조시키기.
1. 회원가입 테이블 만들기
create table member(
id varchar(20) primary key, #줄 대푯값
pwd varchar(20) not null, #null 허용안함
name varchar(20) not null,
email varchar(20) unique #중복허용안함
);
1-1. 3명 회원가입
insert into member values('aaa', '111', 'namea', 'aaa@mail.con');
insert into member values('bbb', '222', 'nameb','bbb@mail.con');
insert into member values('ccc', '333', 'namec','ccc@mail.con');
2. 게시판(num, writher, w_date, title, content) 생성
create table board(
num int auto_increment primary key,
writer varchar(20),
w_date datetime,
title varchar(50),
content varchar(500),
constraint foreign key(writer) references member(id)
);
insert into board(writer, w_date, title, content)
values('aaa', sysdate(), 'title1', 'content1');
insert into board(writer, w_date, title, content)
values('abc', sysdate(), 'title1', 'content');
위의 코드는 에러발생! member(id)에 abc가 없기때문. (근데 번호 생성은 했음.)
insert into board(writer, w_date, title, content)
values('bbb', sysdate(), 'title2', 'content2');
delete from board where writer = 'bbb';
delete from member where id = 'bbb';
-> 삭제시 참조하는 행도 삭제하고 진행해야하기 때문에 create table할 때 on delete cascade를 추가해주면 문제가 없다.
자, drop하고 다시 시작하자.
drop table board;
create table board(
num int auto_increment primary key,
writer varchar(20),
w_date datetime,
title varchar(50),
content varchar(500),
constraint foreign key(writer) references member(id) on delete cascade
);
insert into board(writer, w_date, title, content)
values('aaa', sysdate(), 'title1', 'content1');
그럼 이제 id='aaa' 를 삭제하자.
delete from member where id = 'aaa';
만약, on delete cascade 대신 on delete set null을 추가하면 부모 테이블의 행 삭제시 이 줄을 참조하는 모든 줄의 값을 null로 셋팅이 된다.
'MySQL은 좀 낫다면서요' 카테고리의 다른 글
MySQL #프로시저, 커서 (0) | 2021.06.19 |
---|---|
MySQL #뷰, 인덱스 (0) | 2021.06.18 |
MySQL #테이블 (0) | 2021.06.17 |
MySQL #Ch6.서브쿼리 : 연습문제 (0) | 2021.06.17 |
MySQL #함수 (0) | 2021.06.17 |