
영어로는 강제 라는 의미를 가지고 있다.
이를 SQL에 대입해보면 데이터를 처리하는 것에 있어서 강제할 사항을 정의한다 라고 이해하면 쉬울 것 같다.
이제 우리는 이를 제약조건이라고 부르기로 했다.
Primary Key Constraint (기본 키 제약 조건)
CREATE TABLE PNM_EMPL (
EMPNO NVARCHAR (10) NOT NULL PRIMARY KEY,
// EMPNO 컬럼을 PK로 지정한다.
...
Unique Constraint (고유 제약 조건)
CREATE TABLE PNM_EMPL (
EMPNO NVARCHAR (10) NOT NULL UNIQUE,
// EMPNO 컬럼에는 중복데이터가 허용되지 않는다.
// ex) '01', '01' x
// '01', '02' o
...Check Constraint (검사 제약 조건)
CREATE TABLE PNM_EMPL (
EMPNO NVARCHAR (10) NOT NULL,
CONSTRAINT CHK_EMPNO CHECK (EMPNO LIKE "ABC%")
// EMPNO 컬럼의 데이터는 ABC로 시작하는 데이터여야 한다.
...
Foreign Key Constraint (외래 키 제약 조건)
CREATE TABLE PNM_EMPL (
EMPNO INT PRIMARY KEY,
DEPTNO INT,
CONSTRAINT FK_DEPTNO FOREIGN KEY (DEPTNO) REFERENCES PNM_DEPT(DEPTNO)
// 여기서 PNM_DEPT는 참조데이터를 가진 테이블로 부모테이블이라고 명칭한다.
// PNM_EMPL은 PNM_DEPT의 DEPTNO를 참조 조건으로 가지는 자식테이블이다.
...
Default Constraint (기본값 제약 조건)
CREATE TABLE PNM_EMPL (
EMPNO NVARCHAR (10) NOT NULL,
RM NVARCHAR (100) NOT NULL DEFAULT "ABC"
// RM 컬럼은 별도로 insert되는 값이 없을 경우 기본값으로 ABC라는 값을 무조건 가지게 된다.
...
NotNull Constraint (NOT NULL 제약 조건)
CREATE TABLE PNM_EMPL (
EMPNO NVARCHAR (10) NOT NULL,
// EMPNO 컬럼에는 NULL이 허용되지 않는다.
...Clustered Index Constraint (클러스터형 인덱스 제약 조건)
CREATE TABLE PNM_EMPL (
EMPNO NVARCHAR (10) NOT NULL,
CONSTRAINT [PK_PNM_EMPL] PRIMARY KEY CLUSTERED ([EMPNO] ASC)
...
Non-Clustered Index Constraint (비클러스터형 인덱스 제약 조건)
CREATE TABLE PNM_EMPL (
EMPNO NVARCHAR (10) NOT NULL PRIMARY KEY NONCLUSTERED
...
create일 경우
CONSTRAINT 별로 문법이 다 다르다. ↑ 종류쪽 예시 참고.
drop일 경우 (제거)
DROP CONSTRAINT [제약조건명]
alter일 경우
ALTER TABLE [테이블명] ADD CONSTRAINT [제약조건명] [제약조건내용]
// ex) ALTER TABLE PNM_EMPL ADD CONSTRAINT CHK_RM CHECK (RM LIKE 'ABC%')
// PNM_EMPL 테이블에 CHK_RM이라는 제약조건을 추가. CHK_RM은 RM이라는 컬럼에 'ABC%'를
// 만족하는 데이터를 가지는지 CHECK 한다.
contraint의 list를 보고 싶을 경우
SELECT
k.name AS [제약조건명],
t.name AS TABLE_NAME,
CASE
WHEN t.name LIKE 'PK%' THEN 'Primary Key'
WHEN t.name LIKE 'FK%' THEN 'Foreign Key'
WHEN t.name LIKE 'UQ%' THEN 'Unique'
WHEN t.name LIKE 'CK%' THEN 'Check'
ELSE 'Other'
END AS [내용]
FROM sys.tables t
INNER JOIN sys.key_constraints k
ON t.object_id = k.parent_object_id;