본문 바로가기
카테고리 없음

[DB] SQL SERVER 도메인 무결성 제약조건 설정하기

by 라이프리 2021. 8. 29.

지난 포스팅에서는 무결성 제약조건의 개념에 대해 알아보았습니다. 이번 포스팅에서는 제약조건마다 어떻게 설정하는지에 대해서 알아보겠습니다.

 

 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
);

PRIMARY KEY는 테이블 당 하나의 컬럼만 지정 가능하다.

 

 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판(박우창, 남송휘, 이현룡/ 한빛아카데미)

댓글