SQL 제약 조건
제약조건은 데이터의 무결성을 유지하기 위해 특정 컬럼을 원하는 조건의 데이터만 갖도록 하기 위한 제약이다.
제약조건의 종류
타입 |
설명 |
PRIMARY KEY (기본 키) |
테이블의 행을 고유하게 식별하기 위한 컬럼이며, NULL 값은 불가하므로 기본 키 생성 시 반드시 주의해야 한다. 기본 키 생성 시 DBMS에서 자동으로 UNIQUE 인덱스를 생성한다. (UNIQUE & NOT NULL로 이해하면 쉽다.) |
FOREIGN KEY (외래키) |
다른 테이블의 기본 키를 참조하는 경우 필요한 컬럼이다. |
UNIQUE (고유 키) |
테이블에 저장된 행을 고유하게 식별하기 위한 컬럼이며, 기본 키와는 다르게 NULL 값이 가능하다. |
NOT NULL |
해당 컬럼이 NULL 값을 갖지 못하도록 할 때 선언한다. |
CHECK |
입력할 수 있는 값의 종류와 범위를 제한한다. |
DEFAULT |
컬럼의 값이 지정되어 있지 않을 경우 기본 값을 설정한다. |
제약 조건 생성하기
ALTER 문으로 제약조건 생성하기
ALTER TABLE [테이블명] ADD CONSTRAINT [제약조건명] [제약조건]([컬럼명]);
예) ALTER TABLE CUSTOMERS ADD CONSTRAINT PK_CUSTOMERS PRIMARY KEY (customer_id);
단, DEFAULT 또는 NOT NULL 같이 컬럼명과 데이터 타입 이후에 명시해주는 제약 조건의 추가는 주로 테이블 칼럼의 정의를 변경하는 방법을 사용하며, 다음과 같이 작성한다.
ALTER TABLE [테이블명] MODIFY ([컬럼명1] [데이터 타입] [DEFAULT 식] [NOT NULL], [컬럼명2], [데이터 타입] [DEFAULT 식] [NOT NULL], …);
CREATE 문 안에 제약조건 생성하기
CREATE TABLE [테이블명] (
…
CONSTRAINT [제약조건명] [제약조건]([컬럼명])
);
예) CREATE TABLE customers (
customer_id CHAR(8) NOT NULL,
customer_first_name VARCHAR2(20) NOT NULL,
customer_last_name VARCHAR2(20) NOT NULL,
customer_phonenumber VARCHAR2(10),
CONSTRAINT PK_CUSTOMERS PRIMARY KEY(customer_id)
);
PRIMARY KEY 생성하기
주로 사용하는 PRIMARY KEY의 생성 방법은 크게 3가지가 있다.
1) [컬럼명] [데이터 타입] PRIMARY KEY
2) [컬럼명] [데이터 타입] CONSTRAINT [제약조건명] PRIMARY KEY
3) CONSTRAINT [제약조건명] PRIMARY KEY([컬럼명])
위 방법 중에서 주로 3번을 많이 사용한다.
PRIMARY KEY의 제약
PRIMARY KEY는 테이블 당 반드시 한 개만 만들 수 있지만, PRIMARY KEY를 구성하는 컬럼은 여러 개 사용이 가능하다. PRIMARY KEY 그 자체에 관한 개수와 PRIMARY KEY를 구성하는 컬럼의 개수 제약을 구분할 필요가 있다. [SQLD 문제 출제된 내용]
제약조건 삭제하기
ALTER TABLE [테이블명] DPOP CONSTRAINT [제약조건명]