DB/MySQL

[MySQL] CHECK문을 이용한 제약 조건 설정

야곰야곰+책벌레 2021. 4. 23. 10:25
728x90
반응형

CHECK 제약 조건

  • COLUMN에 들어갈 수 있는 값을 제한
  • 부호, 숫자 비교, 문자 비교 등을 비교할 수 있다.
  • 입력되는 값이 CHECK 조건과 맞지 않으면 에러가 발생한다.
-- 출생년도가 1900년 이후, 2023년 이전으로 제한
-- 이름은 반드시 기입해야 한다.
CREATE TABLE userTBL (
	userID CHAR(8) PRIMARY KEY,
    name VARCHAR(10),
    birthYear INT CHECK (birthYear >= 1900 AND birthYear <=2023), -- 출생년도 입력제한
    CONSTRAINT CK_name CHECK ( name IS NOT NULL ) -- 이름은 NULL 이면 안된다.
);
출생년도 입력제한은 CHECK 에약어로 조건을 지정.
이름 입력제한은 열을 모두 정의한 후에, 마지막에 추가하는 방식 ( 제약 조건의 이름을 지정할 수 있다. )
ALTER TABLE로 제약 조건을 추가할 수 있다.
-- 문자열 제약
CREATE TABLE seqblktbl (
	seqID VARCHAR (20) NOT NULL PRIMARY KEY,
    seqblkType VARCHAR(1) NOT NULL CHECK (seqblkType IN ('g', 's', 'p')),
    note VARCHAR(128)
);
ALTER TABLE `seqblktbl` ADD CONSTRAINT CK_seqblkType CHECK (seqblkType IN ('g', 's', 'p'));

MySQL에서는 CHECK문이 데이터의 무결성을 강제하지 않는다. 

제약 조건을 테이블 생성 후에 지정할 경우, 해당 테이블에 제약 조건을 벗어난 데이터가 있을 경우 4025번 에러를 리턴한다.

728x90
반응형