Database/MSSQL work

키 만들기( 복합키, 유니크, 체크제약 등)

웨이칭 2020. 11. 11. 11:57

 

 

제약조건이란?

 

열에 넣을 값에 대해서 잘못된 값이 들어가지 않도록 제한하는 것.

 

 

NOT NULL : NULL값이 들어가지 않는다.

PRIMARY KEY : 기본 키.

FOREING KEY : 참조 키.

UNIQUE : 중복값 없음.

CHECK : ~~~아래 적음

 

 

 

 

--PK키 생성

create table temp1
(
	userId	char(8) primary key,
	name	nvarchar(8)
);
GO

 

 

--PK키에 이름지어 생성

create table temp2
(
	userId	char(8)			constraint PK_temp2_userId primary key,
	name	nvarchar(10)
);
GO

 

 

 

 

--복합키만들기

create table goodsTbl
(
	prodCode	varchar(10)	not null,
	prodId		char(3)		not null,
	prodName	nvarchar(10),
	constraint PK_goodsTbl_prodCode_prodId
	primary key (prodCode, prodId)
);
GO

 

 

 

 

--외래키 

create table temp3
(
	seq		int	identity(1,1) primary key,
	userId	char(8)	foreign key references temp1(userId)
);
GO
exec sp_help temp3

 

 

 

 

 

--Unique Key (null 허용)

create table temp4
(
	userId	char(8) primary key,
	email varchar(30) null unique
);
GO

 

 

 

 

 

 

--체크 제약조건 check

create table temp6
(
	userId	char(8)		primary key,
	email	varchar(30) null unique,
	mobile	char(3)		check(mobile in('010','011','017','018','019'))
);
GO

 

CHECK : 제약조건을 추가한다. (?)

 

테이블을 만들 때의 예를 보시죠.

CREATE TABLE table

(

id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, // NOT NULL, PRIMARY KEY 도 제약조건 입니다.

col CHAR(1) CHECK (col IN ('A', 'B', 'C')) // col에는 'A', 'B' 또는 'C'만 저장할 수 있습니다.

);

CREATE TABLE table
(
    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, 
        // NOT NULL, PRIMARY KEY 도 제약조건 입니다.
    col CHAR(1) CHECK (col IN ('A', 'B', 'C')) 
        // col에는 'A', 'B' 또는 'C'만 저장할 수 있습니다.
);

 

위 테이블에 INSERT로 col값에 'Z'를 저장하려 한다면 에러가 발생합니다!

 

테이블을 이미 만들었습니다.

그럼 테이블에 있는 하나의 열에 제약조건을 추가해보죠.

ALTER TABLE table

ADD CONSTRAINT CHECK (col NOT IN ('X')); // col에는 'X'를 저장할 수 없습니다.

 

IN도 되고 NOT IN도 되네요. 또 다른 방법은 뭐가 있을까요?

 

CHECK (col < 10)

CHECK (col = 'ABCDE')

CHECK ('ABC' = SUBSTRING(col, 2, 3)

CHECK (col BETWEEN 5 AND 6)

CHECK (col LIKE '_A' OR col LIKE 'A%')