지난 포스팅에서는 무결성 제약조건의 개념에 대해 알아보았습니다. 이번 포스팅에서는 제약조건마다 어떻게 설정하는지에 대해서 알아보겠습니다.
NOT NULL
NOT NULL 제약조건이 설정된 컬럼에는 빈 값을 넣을 수 없도록 제약하는 조건입니다.
/*
CREATE TABLE TABLE_NAME
(
COLUMN_NAME DATATYPE CONSTRAINT CONSTRAINT_NAME NOT NULL,
);
*/
CREATE TABLE NOTNULL_CONSTRAINT
(
IID INT NOT NULL, -- 단순하게 NOT NULL이라고 설정해도 된다.
NAME NVARCHAR(50) CONSTRAINT CONS_NOTNULL NOT NULL,
AGE INT NOT NULL,
)
CHECK
제약조건을 설정한 컬럼에 특정 조건의 값만 입력하도록 지정합니다.
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
CHECK (Age>=18)
);
/*
제약조건을 복수로 걸고 싶다면 AND, OR 연산자 이용
CHECK (Age>=18 AND LastName <> 'Kim')
*/
Age를 18 이상의 숫자만 입력하도록 제약조건을 설정해놓은 상태입니다.
여기에 18 미만의 정수를 INSERT하려고하면 오류가 발생합니다.
-- CHECK 조건 에러코드
INSERT INTO Persons(
ID
,LastName
,FirstName
,Age)
VALUES(
1
,'KIM'
,'JEONGEUN'
, 17)
DEFAULT
입력을 생략하면 지정한 기본값으로 입력되도록 제약조건을 지정합니다.
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
City varchar(255) DEFAULT 'Sandnes'
);
-- 데이터 입력(City 생략)
INSERT INTO Persons(
ID
,LastName
,FirstName
,Age)
VALUES(
1
,'KIM'
,'JEONGEUN'
, 17
);
-- 데이터 조회
SELECT
*
FROM Persons
City 컬럼을 별도로 INSERT하지 않았는데도 불구하고, DEFAULT 제약조건에 의해 'Sandnes'로 입력된 것을 확인할 수 있습니다.
UNIQUE, PRIMARY KEY
두 제약조건 모두 고유한 값만 입력할 수 있도록 하는 제약 조건입니다. PRIMARY KEY 제약조건을 설정하면 UNIQUE가 자동으로 설정된다고 보시면 됩니다.
둘의 차이점은 설정할 수 있는 컬럼의 수 입니다. UNIQUE는 한 테이블 내에 다수의 컬럼을 지정할 수 있지만 PRIMARY KEY 조건은 한 테이블당 하나의 컬럼만 지정할 수 있습니다.
-- UNIQUE 제약조건 설정
CREATE TABLE Persons (
ID int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int
);
-- UNIQUE는 다수의 컬럼을 지정할 수 있다.
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
CONSTRAINT UC_Person UNIQUE (ID,LastName)
);
-- PRIMARY KEY 제약조건 설정
CREATE TABLE Persons (
ID int NOT NULL PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int
);
FOREIGN
외래키를 설정하는 제약조건입니다.
-- 부모 테이블 생성 Persons
-- PRIMARY KEY 제약조건 설정
CREATE TABLE Persons (
ID int NOT NULL PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int
);
-- 하나의 컬럼만 외래키 설정
CREATE TABLE Orders (
OrderID int NOT NULL PRIMARY KEY,
OrderNumber int NOT NULL,
PersonID int FOREIGN KEY REFERENCES Persons(ID)
);
-- 외래키 제약조건의 이름을 설정하고, 여러 컬럼에 외래키 제약조건 설정
CREATE TABLE Orders (
OrderID int NOT NULL,
OrderNumber int NOT NULL,
PersonID int,
PRIMARY KEY (OrderID),
CONSTRAINT FK_PersonOrder FOREIGN KEY (PersonID)
REFERENCES Persons(ID)
);
참고: SQL Server로 배우는 데이터베이스 개론과 실습 2판(박우창, 남송휘, 이현룡/ 한빛아카데미)
댓글