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

+ Recent posts