제약조건으로 테이블 견고하게 함
데이터의 무결성을 지키기 위해 하는 것
primary key 등
primary key : 중복 방지, 빈 여백 허용 안됨. 식별키. 테이블 중 하나만 가능
foreign key : 두 테이블을 연결할 때, 그 연결 사이의 무결성을 보장해주는. 외래키의 값이 대상테이블에 존재 해야만 함.
unique : 중복 방지, 빈 여백 허용.
check : 조건 부여하면 조건에 부합하지 않는 데이터 입력시 걸러줌. 말 그대로 체크
default : 기본값. 딱히 설정 안할 시 null 대신 넣어지는 거?
not null : null 방지
그럼 unique에다가 not null 하면 primary key랑 비슷할 듯
외래키로 다른 테이블과 맺어진 후 이 왜래키 값은 변경하거나 바꿀 수 없다.
이럴 때는 제약조건에 옵션을 더 추가해 줘야 함.
on update cascade // update 전파
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
);
아예 테이블 만들 때 넣을 수도 있고,
alter table buy add constraint foreign key(user_id) references member(mem_id) on update cascade on delete cascade;
이렇게 테이블 수정 명령어로 제약조건 추가할 수 있음
add constraint, 직역은 추가 강제(제약)
근데 저거 하려면 저게 add 하면서 제약조건 추가인거라 기존에 똑같은 제약조건 있으면 안들어감.
기존 제약조건 제거 한 다음 다시 넣어줘야 함.
alter table buy drop constraint buy_ibfk_1;
alter table 테이블명 drop constraint 제약조건키이름;
저 제약조건키이름이 열명이 아니라, 제약조건 이름이 따로 있음.
check
create table member(
mem_id char(8) not null primary key,
mem_name varchar(10) not null,
height tinyint unsigned null check(height >= 100),
phone1 char(3) null
);
insert member values('BLK', '블랙핑크', 80); --안됌
alter table member add constraint check (phone1 in ('02','031', '032', '054', '055', '061')); -- 수정
insert into member values('TWC', '트와이스', 167, '03'); -- 안됨
default
걍 기본값
create table member(
mem_id char(8) not null primary key,
mem_name varchar(10) not null,
height tinyint unsigned null default 160,
phone1 char(3) null
);
insert into member values('SPC', '우주소녀', default, '054');
insert into member(mem_id, mem_name, phone1) values('RED', '레드벨벳', '054');
이렇게 값을 안주거나 default로 주면 기본값이 됨.
default 설정 안하고 insert 할 때 default 주면 에러.