DB

제약조건

sdafdq 2023. 11. 8. 10:01

제약조건으로 테이블 견고하게 함

데이터의 무결성을 지키기 위해 하는 것

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 주면 에러.

 

 

 

'DB' 카테고리의 다른 글

인덱스  (0) 2023.11.10
뷰 가상테이블  (0) 2023.11.09
동적 SQL  (0) 2023.11.07
스토어드 프로시저  (0) 2023.11.06
join 연습  (0) 2023.11.03