Study/DB

[SQL 첫걸음] 6장.데이터베이스 객체 작성과 삭제 - 27.제약

momo02 2018. 9. 16. 16:30
반응형

저자 : 아사이 아츠시

출판 : 한빛미디어 

발매 : 2015.11.01



1. 테이블 작성시 제약 정의

- CREATE TABLE로 테이블을 작성할 때 제약을 같이 정의. 물론 ALTER TABLE로 제약을 지정하거나 변경할 수 있음. 이 때 NOT NULL 제약 등 하나의 열에 대해 설정하는 제약은 열을 정의할 때 지정. 

1
2
3
4
5
6
-- 특정 열에 NOT NULL 제약과 UNIQUE 제약을 설정. 
CREATE TABLE sample631 (
                a INTEGER NOT NULL,
                b INTEGER NOT NULL UNIQUE,
                C VARCHAR(30)
);
cs

- 이처럼 열에 대해 정의하는 제약을 '열 제약', 복수의 열에 제약을 설정하는 경우를 '테이블 제약'이라 부름.


1
2
3
4
5
6
7
-- 테이블에 '테이블 제약' 정의
CREATE TABLE sample632 (
                no INTEGER NOT NULL,
                sub_no INTEGER NOT NULL,
                name VARCHAR(30),
                PRIMARY KEY (no, sub_no)
);
cs


- 제약에는 이름을 붙일 수 있음. 제약에 이름을 붙이면 나중에 관리하기 쉬워지므로 가능한 한 이름을 붙임. 제약 이름은 CONSTRAINT 키워드를 사용해서 지정. 

1
2
3
4
5
6
7
8
-- 테이블에 '테이블 제약' 정의
-- 테이블 제약에 이름 붙이기
CREATE TABLE sample632 (
                no INTEGER NOT NULL,
                sub_no INTEGER NOT NULL,
                name VARCHAR(30),
                CONSTRAINT pkey_sample PRIMARY KEY (no, sub_no) ===> 기본키 제약 설정
);
cs




2. 제약 추가

  • 열 제약 추가 

- 기존 테이블에 열 제약을 추가할 경우 ALTER TABLE 명령 사용하여 열 정의를 변경할 수 있음. 

- 기존 테이블을 변경할 경우에는 제약을 위반하는 데이터가 있는지 먼저 검사. 

1
2
-- c열에 NOT NULL 제약 걸기 
ALTER TABLE sample631 MODIFY c VARCHAR(30NOT NULL
cs

- 만약 c 열에 NULL값이 존재한다면 ALTER TABLE 명령은 에러가 발생함.  

  • 테이블 제약 추가

- 테이블 제약은 ALTER TABLE의 ADD 하부명령으로 추가할 수 있음.

1
2
-- 테이블 제약(기본키 제약) 추가 
ALTER TABLE sample631 ADD CONSTRAINT pkey_sample631 PRIMARY KEY(a);
cs

- 기본키는 테이블에 하나만 설정 가능. 이미 기본키가 설정되어 있는 테이블에 추가로 기본키를 작성할 수 없음. 




3. 제약 삭제

  • 열 제약 삭제 

열 제약의 경우, 제약을 추가할 때와 동일하게 열 정의를 변경. 

- 앞서 추가한 c열의 NOT NULL 제약을 삭제하는 ALTER TABLE의 예

1
2
-- c열에 NOT NULL 제약 없애기
ALTER TABLE sample631 MODIFY c VARCHAR(30);
cs
  • 테이블 제약 삭제 

- 테이블 제약은 ALTER TABLE의 DROP 하부명령으로 삭제 가능. 삭제할 때는 제약명을 지정. 

- 기본키는 테이블 당 하나만 설정할 수 있기 때문에 위처럼 굳이 제약명을 지정하지 않고도 2번 처럼삭제할 수 있음. 

1
2
3
4
5
6
-- 테이블 제약 삭제 
 
-- 1. pkey_sample631(제약명으로) 제약 삭제 
ALTER TABLE sample631 DROP CONSTRAINT pkey_sample631;
-- 2. 기본키 제약 삭제 
ALTER TABLE sample631 DROP PRIMARY KEY; ==> MySQL은 이렇게 삭제
cs

cf. UNIQUE 제약 조건 삭제

1
2
3
4
5
6
7
-- MySQL
ALTER TABLE sample631 
DROP INDEX 열명;
 
-- SQL Server / Oracle / MS Access
ALTER TABLE sample631 
DROP CONSTRAINT 제약명;         
cs




4. 기본키

- 기본키는 테이블의 행 한 개를 특정할 수 있는 검색키. 기본키로 지정할 열은 NOT NULL 제약이 설정되어 있어야 함. 

- 기본키 제약이 설정된 테이블에서는 기본키로 검색했을 때 복수의 행이 일치하는 데이터를 작성할 수 없음. 즉 기본키로 설정된 열이 중복하는 데이터를 값을 가지면 제약에 위반됨.  

- 이처럼 열을 기본키로 지정해 유일한 값을 가지도록 하는 구조가 바로 기본키 제약.  행이 유일성을 필요로 한다는 다른 의미에서 '유일성 제약'이라 불리기도 함. 

- 복수의 열로 기본키 구성 가능. 복수의 열을 기본키로 지정했을 경우, 키를 구성하는 모든 열을 사용해서 중복하는 값이 있는지 없는지를 검사. 

반응형