SQL 10-5. CHECK 제약 조건
관련링크
본문
CHECK 제약 조건은 각 행이 만족시켜야 하는 조건을 정의한다.
이 조건에서는 질의 조건과 동일한 구조를 사용할 수 있지만 다음과 같은 예외가 있다.
․ CURRVAL, NEXTVAL, LEVES 및 ROWNUM 의사 열 참조
․ SYSDATE, UID,USER 및 USERENV 함수 호출
․ 다른 행의 다른 값을 참조하는 질의
단일 열이 자신을 참조하는 CHECK 제약 조건을 열 정의에 여러 개 포함시킬 수 있다.
열에 정의할 수 있는 CHECK 제약 조건의 수에는 제한이 없다.
CHECK 제약 조건은 열 레벨 또는 테이블 레벨로 정의할 수 있습니다.
CREATE TABLE employees
(...
salary NUMBER(8,2) CONSTRAINT emp_salary_min CHECK (salary > 0),
...
)
MSSQL 디비 예제
create table checkexam(
city char(10)
check( city in ('서울', '대전', '강릉', '태백'))
)
insert into checkexam values('서울')
insert into checkexam values('춘천') //안들어감
-- 또는
create table checkexam1(
city char(10)
constraint ch_checkexam_city check (city in ('서울', '대전', '강릉', '태백'))
)
insert into checkexam1 values('춘천')
create table checkconst(
eid int identity not null,
value1 tinyint not null check (value1 between 1 and 100),
value2 int not null,
name1 varchar(10) not null check (name1 like '[a-f]%'),
name2 varchar(10) null default 'f' check (name2 in ('a', 'b', 'c')),
check (value1 < value2)
)
또는
create table checkconst1(
eid int identity not null,
value1 tinyint not null,
value2 int not null,
name1 varchar(10) not null,
name2 varchar(10) null default 'f',
check(value1 between 1 and 10),
check(name1 like '[a-f]%'),
check(name2 in ('a', 'b')),
check(value1 < value2)
)
CONSTRAINT emp_job_nn NOT NULL
,salary NUMBER(8,2) CONSTRAINT emp_salary_ck CHECK (salary>0)
,commission_pct NUMBER(2,2)
, manager_id NUMBER(6)
, department_id NUMBER(4) CONSTRAINT emp_dept_fk REFERENCES departments (department_id)
);
MSSQL 디비 예제 :
use pubs -- 테스트를 위해 pubs 디비로 이동하자.
UPDATE employee
SET pub_id = 55
WHERE emp_id = 'F-C16315M';
메시지 547, 수준 16, 상태 0, 줄 2
UPDATE 문이 FOREIGN KEY 제약 조건 "FK__employee__pub_id__24927208"과(와) 충돌했습니다.
데이터베이스 "pubs", 테이블 "dbo.publishers", column 'pub_id'에서 충돌이 발생했습니다.
문이 종료되었습니다.
select * from checkconst
insert into checkconst values(1,2,'a..','a')
insert into checkconst values(200, 300, 'f..', 'b')
insert into checkconst values(100, 100, 'f..','b')
insert into checkconst values(100, 200, 'd..', default)