728x90
반응형
제약 조건 ( Constraint )이란 데이터의 무결성을 지키기 위해 제한된(한) 조건을 말한다.
즉, 데이터를 삽입, 수정 등을 할 때 무조건 삽입하고 수정하는 것이 아니고 제한된 조건을 만족해야지만 삽입하고 수정하여 무결성을 지키는 것이다.
SQL Server에서 정의된 제약조건에는 아래와 같다.
- Primary Key Constraint : PK 조건에 만족하는가?
- Foreign Key Constraint : FK 조건에 만족하는가?
- UNIQUE Constraint : 유니크한 Value인가?
- CHECK Constraint : 체크로직에 만족하는가? (ex) Value > 100
- DEFAULT Constraint : Default 값을 부여하는 제약조건.
● Primary Key Constraint
"PK 조건에 만족하는가?" 라고 설명을 했지만 흔하게 PK를 지정해준다라고 생각하면 된다.!
- 테이블 생성 시 제약조건 설정.
-- 테이블 생성 시 컬럼에 명시.
CREATE TABLE CONSTRAINT_TEST(
SEQ INT NOT NULL CONSTRAINT PK_SEQ PRIMARY KEY
)
-- CONSTRAINT 구문 생략 가능. 제약조건 이름을 자동 설정한다.
CREATE TABLE CONSTRAINT_TEST(
SEQ INT NOT NULL PRIMARY KEY
)
- 테이블에 제약조건 추가.
-- PK SEQ 제약조건 추가. ( INDEX DEFAULT : CLUSTERED INDEX )
ALTER TABLE CONSTRAINT_TEST
ADD CONSTRAINT PK_SEQ PRIMARY KEY (SEQ)
-- PK 복합키 제약조건 추가. ( INDEX DEFAULT : CLUSTERED INDEX )
ALTER TABLE CONSTRAINT_TEST
ADD CONSTRAINT PK_SEQ_ID PRIMARY KEY (SEQ, ID)
-- PK SEQ 제약조건 추가. ( INDEX : NONCLUSTERED INDEX )
ALTER TABLE CONSTRAINT_TEST
ADD CONSTRAINT PK_SEQ PRIMARY KEY (SEQ) NONCLUSTERED
● Foreign Key Constraint
"FK조건에 만족하는가?" FK 외래 키를 설정한다고 생각하면 된다.
- 테이블 생성 시 제약조건 설정.
-- 테이블 생성 시 컬럼에 명시.
CREATE TABLE CONSTRAINT_TEST(
SEQ INT NOT NULL CONSTRAINT PK_SEQ PRIMARY KEY
, USER_NAME VARCHAR(100) NOT NULL
CONSTRAINT FK_USERNAME FOREIGN KEY REFERENCES USER_TBL(NAME)
)
-- CONSTRAINT 구문 생략 가능. 제약조건 이름을 자동 설정한다.
CREATE TABLE CONSTRAINT_TEST(
SEQ INT NOT NULL PRIMARY KEY
, USER_NAME VARCHAR(100) NOT NULL FOREIGN KEY REFERENCES USER_TBL(NAME)
)
- 테이블에 제약조건 추가.
-- FK USER_NAME 제약조건 추가.
ALTER TABLE CONSTRAINT_TEST
ADD CONSTRAINT FK_USERNAME FOREIGN KEY (USER_NAME) REFERENCES USER_TBL(NAME)
-- FK 복합키 제약조건 추가.
ALTER TABLE CONSTRAINT_TEST
ADD CONSTRAINT FK_ID_USERNAME FOREIGN KEY (USER_ID, USER_NAME) REFERENCES USER_TBL(ID, NAME)
아래도 위 와 같다. 소스 코드만 명시하도록 하겠습니다.
● UNIQUE Constraint
- 테이블 생성 시 제약조건 설정.
CREATE TABLE Production.TransactionHistoryArchive4
(
TransactionID int NOT NULL,
CONSTRAINT AK_TransactionID UNIQUE(TransactionID)
);
- 테이블에 제약조건 추가.
ALTER TABLE Person.Password
ADD CONSTRAINT AK_Password UNIQUE (PasswordHash, PasswordSalt);
● CHECK Constraint
- 테이블에 제약조건 추가.
ALTER TABLE dbo.DocExc
ADD ColumnD int NULL
CONSTRAINT CHK_ColumnD_DocExc
CHECK (ColumnD > 10 AND ColumnD < 50);
-- 정상케이스
INSERT INTO dbo.DocExc (ColumnD) VALUES (49);
-- 비정상 케이스.
INSERT INTO dbo.DocExc (ColumnD) VALUES (55);
● DEFAULT Constraint
- 테이블 생성 시 제약조건 설정.
CREATE TABLE dbo.doc_exz (
column_a INT,
column_b INT DEFAULT 50
);
-- 제약사항 이름 정의.
CREATE TABLE dbo.doc_exz (
column_a INT,
column_b INT CONSTRAINT DF_Doc_Exz_Column_B DEFAULT 50
);
- 테이블에 제약조건 추가.
ALTER TABLE dbo.doc_exz
ADD CONSTRAINT DF_Doc_Exz_Column_B
DEFAULT 50 FOR column_b;
728x90
반응형
'DataBase > MSSQL' 카테고리의 다른 글
[MSSQL] DBCC SHRINKFILE - DB 데이터/로그 파일 축소하기 - 1편 (0) | 2022.05.03 |
---|---|
[MSSQL] 파일 그룹별로 디스크 할당량, 사용량, 할당 가능량 조회 쿼리 (0) | 2022.05.02 |
[MSSQL] 테이블 컬럼 추가, 수정, 삭제 ALTER TABLE (0) | 2022.04.15 |
[MSSQL] 데이터베이스 파일그룹 정리 (0) | 2022.02.18 |
[MSSQL] CentOS MSSQL 설치하기 (0) | 2021.12.30 |