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 | 
![[MSSQL] 제약조건(CONSTRAINT)이란 ?](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FFEZSR%2FbtrBbLlyIDn%2FAAAAAAAAAAAAAAAAAAAAAJWCVnz9QxaRglGB5c7yh5W3dWHVAmKYCglFo1RA2ppJ%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1761922799%26allow_ip%3D%26allow_referer%3D%26signature%3DvbSff3w9dxHB%252BXeppgBi%252BKLa%252FI0%253D)