Constraint은 테이블에 저장되는 데이터의 정확성과 신뢰성을 보장하기 위해 사용하는 규칙이다.
예를 들어 이 컬럼에는 음수는 저장되게 하지마! 이 컬럼에 입력되는 값은 NULL을 허용하지 않아! 이 테이블에서 함부로 행을 삭제하지마!와 같이 Constraint를 컬럼이나 테이블에 적용한다.
만약 앞에서 예로 든 Constraint를 만족하지 않는 Value의 저장이 시도되면 바로 Error메시지가 발생하며 실행을 거부할 것이다.
Constraint는 테이블을 만들때(Create Table) 함께 지정해준다.
Create table table_name (
Col1 datatype constraint,
Col2 datatype constraint,
Col3 datatype constraint
…..
);
아래는 SQL에서 주로 사용하는 일반적인 Constraint들이다.
1. NOT NULL : 은 컬럼에 null 값을 허용하지 않는다.
Create Table Stocks (
Stock_Name nvarchar(255) Not Null,
Stock_Price int Not Null
);
-- 이미 테이블을 생성했다면
Alter Table Stocks
Alter Column Stock_Price int Not Null;
-- Constraint 삭제
Alter Table Stocks
Alter Column Stock_Price int Null;
2. Unique는 어떤 컬럼에 있는 모든 값들이 달라야 한다. 다시 말해 중복된 값을 허용하지 않는다.
Create Table Stocks (
Stock_Name nvarchar(255),
Stock_Price int,
Unique(Stock_Name)
);
-- 이미 테이블을 생성했다면
Alter Table Stocks
Add Constraint unique_Stock_Name Unique(Stock_Name)
-- Constraint 삭제
Alter Table Stocks
Drop Constraint unique_Stock_Name;
3. Primary key 는 not null과 unique의 컴비네이션이다. 어떤 테이블의 행을 유일하게 식별해준다.
Create Table Stocks (
Stock_Name nvarchar(255) Primary Key,
Stock_Price int
);
4. Foreign key 는 다른 테이블의 행을 유일하게 식별해준다.
Create Table Stocks (
Stock_Name nvarchar(255) Primary Key,
Stock_Price int,
Trade_No,
Constraint fk_Trade_No Foreign Key(Trade_No)
Refferences Stock_Trade_History(Trade_No)
);
5. Check는 어떤 조건을 만족하는 값만을 컬럼에 저장시켜준다.
Create Table Stocks (
Stock_Name nvarchar(255) int not null,
Stock_Price int Check (StockProce > 0) – 주식
);
-- 이미 테이블을 생성했다면
Alter table Stocks
Add Contraint Chk_Price Check (Price > 0)
-- Constraint 삭제
Alter Table Stocks
Drop Contraint Chk_Price
6. Default 특정한 값이 할당되지 않으면 default로 지정한 값을 자동으로 저장해준다.
Create Table Stocks (
Stock_Name nvarchar(255),
Stock_Price int,
Close_Date date default Getdate()
);
-- 이미 테이블을 생성했다면
Alter Table Stocks123
Add Constraint df_Close_Date
Default Getdate() For Close_Date;
7. Index 는 데이터베이스로부터 데이터를 빨리 조회할 목적으로 만든다. 책의 색인과 같다.
-- 추후 상세히 이 부분은 기술하겠음.
'데이터베이스' 카테고리의 다른 글
Minimum Cardinality와 Maximum Cardinality 차이 (0) | 2020.07.06 |
---|---|
관계 타입의 유형 (0) | 2020.07.05 |
트리거(Trigger) (0) | 2020.07.03 |
관계(Relationship)와 관계 타입(Relationship Type) (0) | 2020.07.02 |
속성 (0) | 2020.07.01 |