<aside> 💡 실습에 앞서 새로운 데이터 베이스를 만듭니다.
</aside>
create database sparta_db;
use sparta_db;
기본 키(Primary Key) 제약 조건
create table member
( mem_id char(8) not null primary key,
mem_name varchar(10) not null,
height tinyint unsigned null
);
혹은
create table member
( mem_id char(8) not null primary key,
mem_name varchar(10) not null,
height tinyint unsigned null
);
alter table member add constraint primary key (mem_id);
외래 키(Foreign Key) 제약 조건
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 테이블에서 mem_id(PK) 를 변경하거나, member를 삭제하면?

👌 일대다 (PK-FK) 관계를 맺은 상태에서는 제약조건으로 오류를 발생 시킴
-- BLK 회원 추가
insert into member values('BLK', '블랙핑크', 163);
-- BLK 구매 추가
insert into buy values(null, 'BLK', '지갑');
insert into buy values(null, 'BLK', '맥북');
-- 데이터 확인
select M.mem_id, M.mem_name, B.prod_name
from buy B
join member M
on B.mem_id = M.mem_id;
update member set mem_id = 'PINK' where mem_id = 'BLK'; -- 에러!
delete from member where mem_id = 'BLK'; -- 에러!
<aside> 💡 만약 에러가 발생 하지 않고 member 테이블의 ‘BLK’가 ‘PINK’로 변경 되었다면 어떻게 될까요? buy 테이블에는 여전히 mem_id가 ‘BLK’로 되어있어서 해당 열은 member 테이블을 참조 하지도 못하는 고아 신세가 됩니다. 데이터 무결성이 깨진 상태 입니다. 이렇게 데이터베이스는 무결성을 지키기 위해 제약조건을 발동시켜 오류를 발생 시킵니다. 데이터가 엉망이 되는것 보다 해당 쿼리를 동작하지 못하게 하는게 훨씬 좋으니까요.
</aside>
ON UPDATE CASCADE, ON DELETE CASCADE
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
);
<aside> 💡 위에 나온 SQL을 사용하여 buy 테이블에 데이터를 넣고, 회원 테이블의 mem_id를 변경해보고 구매 테이블에 mem_id 가 변경 되었는지 확인해보세요.
그리고 회원 테이블의 데이터를 삭제해보고, 구매 테이블을 확인해보세요.
</aside>
기타 제약 조건
drop table buy, member; -- 실습을 위해 테이블 모두 삭제
create table member
( mem_id char(8) not null primary key,
mem_name varchar(10) not null,
email char(30) null unique,
height tinyint unsigned null check (height >= 100),
phone1 char(3) default '02'
);
<aside> 💡 insert 문을 사용하여 데이터를 입력해보세요. 기타 제약조건이 잘 동작 하는지 확인해보세요.
</aside>