제약조건
제약조건
컬럼에 저장 될 데이터의 조건을 설정하는 것
제약 조건을 설정하면 조건에 위배되는 데이터는 저장할 수 없다.
데이터베이스 내의 테이블은 여러 개발자가 사용하므로 제약 조건 설정이 중요하다.
primary key : 컬럼에 중복으로 데이터를 저장할 수 없으며, null 값을 허용하지 않는다. 주로 각 로우를 구분하기 위한 유일한 값을 저장하는 컬럼에 사용한다. 기본키라고도 부른다.
foreign key : 특정 테이블의 primary key 컬럼에 저장되어 있는 값만 저장할 수 있도록 한다. 흔히 참조키, 외래키라고 부르며 지정된 테이블의 기본키 컬럼을 참조하여 참조하는 기본키 컬럼에 저장되어 있는 값만 저장할 수 있다. null 값을 허용한다.
not null : 컬럼에 null 값을 저장할 수 없으며 쿼리문을 통해 반드시 값이 지정되어야 한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44create table test_table10(
data1 int not null
);
insert into test_table10 (data1) value (1);
insert into test_table10 (data1) value (2);
insert into test_table10 (data1) value (3);
select * from test_table10;
insert into test_table10 (data1) value (null); -- 에러메시지 뜸
create table test_table20(
data1 int,
data2 int not null,
constraint pk1 primary key(data1)
);
insert into test_table20 (data1, data2) values (10, 100);
insert into test_table20 (data1, data2) values (20, 200);
insert into test_table20 (data1, data2) values (30, 300);
select * from test_table20;
insert into test_table20 (data1, data2) values (10, 100); -- 에러메시지 뜸
insert into test_table20 (data1, data2) values (10, null); -- 에러메시지 뜸
create table test_table30(
data1 int,
data2 int,
constraint pk2 primary key (data1),
constraint fk2 foreign key (data2) references test_table20 (data1)
);
select * from test_table20;
insert into test_table30 (data1, data2) values (1,10);
insert into test_table30 (data1, data2) values (1, 40); -- 에러메시지 (data1에는 40 이라는 값이 없음)
insert into test_table30 (data1, data2) values (2, null);
insert into test_table30 (data1) values (6);
select * from test_table30;unique : 컬럼에 중복된 값을 저장할 수 없다. null은 허용한다
check : 값의 범위나 종류를 지정하여 조건에 맞는 값만 저장할 수 있도록 한다. check 제약조건은 mysql에서 지원하지 않는다.
default : null이 들어올 경우 기본 설정되는 값을 지정한다. default를 설정할 경우 컬럼에 null을 저장할 수 없다.
1 | create table test_table40( |