제약조건이란?
열에 넣을 값에 대해서 잘못된 값이 들어가지 않도록 제한하는 것.
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%')
'Database > MSSQL work' 카테고리의 다른 글
table (0) | 2020.11.11 |
---|---|
AdventureWorks 연습 (0) | 2020.11.11 |
반복문 while, continue (0) | 2020.11.11 |
exec 쿼리문 실행 (0) | 2020.11.11 |
에러상태 확인하기 (0) | 2020.11.11 |