[01.12] 내일배움캠프[Spring] TIL-52

박상훈·2023년 1월 13일
0

내일배움캠프[TIL]

목록 보기
52/72

[01.12] 내일배움캠프[Spring] TIL-52

1.SQL

제약 조건

//mem_id를 pk로 가진 member table 생성
create table member (
	mem_id char(8) not null primary key,
    mem_name varchar(10) not null,
    height tinyint unsigned null
);

//member table의 pk인 mem_id를 foreign key로 갖는 buy table 생성!
create table buy(
	num int auto_increment not null primary key,
    mem_id char(8) not null,
    prod_name char(6) not null,
    foreign key(mem_id) references member(mem_id) // 이 부분
);

//member table과 buy talbe에 data 넣어주기
insert into member values('BLK','블랙핑크',163);
insert into buy values(null,'BLK','지갑');
insert into buy values(null,'BLK','맥북');

//mem_id를 외래키로 참조하여 buy table과 member table join
select m.mem_id,m.mem_name,b.prod_name
from buy B join member m on b.mem_id = m.mem_id;

//이 상태에서 member table의 pk를 update하는 쿼리를 날리면 Error!!!
//만약 이 pk값이 바뀌게 되면 pk를 참조하는 foreign key를 가진 buy table과의 무결성 해치기 때문!!
update member set mem_id = 'PINK' where mem_id = 'BLK';

//member table의 pk를 foreign key 로 가지는 buy table 생성시 casecade속성을 부여하여,
//member table의 mem_id가 바뀌거나 삭제되면, buy table의 해당 mem_id참조 부분도 삭제되거나, 변경되게 조건을 걸어주는 것!!
create table buy (
	num int auto_increment not null primary key,
    mem_id char(8) not null,
    prod_name char(6) not null,
    foreign key(mem_id) references member(mem_id)
    on update cascade // 업데이트 될 때 같이 업데이트
    on delete cascade // 삭제 될 때 같이 삭제
);

//근데 만약 테이블 생성시 제약조건을 걸어주지 못했다면 Alter을 통해서 추가 가능!
//이 때는 기존에 추가됐던 foreign key를 제거하고 다시 추가해줘야한다!
alter table buy drop foreign key mem_id;
    
alter table buy add constraint foreign key 
(mem_id) references member(mem_id) on delete cascade on update cascade;
    
//그 후 update와 delete를 해줬을 때 같이 삭제되거나 수정되는 모습을 볼 수 있다.
update member set mem_id = 'PINK' where mem_id = 'BLK';
delete from member where mem_id = 'BLK';

2. 코딩 테스트

profile
기록하는 습관

0개의 댓글