JoJun's
Jun's Devlog
JoJun's
전체 방문자
오늘
어제
  • 분류 전체보기 (51)
    • Java (16)
      • SpringBoot (12)
      • Java (4)
    • Linux (11)
      • CentOS (4)
      • 명령어(CentOS) (5)
      • Docker (2)
    • DataBase (15)
      • 튜닝 기법 (1)
      • MSSQL (7)
      • SQLD,SQLP (6)
    • 알고리즘 (4)
      • 정렬 (1)
      • 해시 (1)
      • 완전탐색 (1)
      • 탐욕법 (1)
    • 인프라 (3)
    • Web (2)
    • 개인공간 (0)

블로그 메뉴

  • 홈

공지사항

인기 글

태그

  • log4j2
  • MSSQL
  • springboot
  • Dockerfile
  • @Component
  • cors
  • docker
  • Java
  • 알고리즘
  • 파일그룹

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
JoJun's

Jun's Devlog

[MSSQL] 제약조건(CONSTRAINT)이란 ?
DataBase/MSSQL

[MSSQL] 제약조건(CONSTRAINT)이란 ?

2022. 4. 20. 17:15
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
    'DataBase/MSSQL' 카테고리의 다른 글
    • [MSSQL] DBCC SHRINKFILE - DB 데이터/로그 파일 축소하기 - 1편
    • [MSSQL] 파일 그룹별로 디스크 할당량, 사용량, 할당 가능량 조회 쿼리
    • [MSSQL] 테이블 컬럼 추가, 수정, 삭제 ALTER TABLE
    • [MSSQL] 데이터베이스 파일그룹 정리
    JoJun's
    JoJun's
    JoJun's의 기술블로그

    티스토리툴바