코드 그라데이션

Day07-3. 제약 조건 (3) - UNIQUE, CHECK 제약 조건, DEFAULT 본문

Database/Mega-MySQL

Day07-3. 제약 조건 (3) - UNIQUE, CHECK 제약 조건, DEFAULT

완벽한 장면 2023. 6. 25. 17:44

UNIQUE 제약 조건

  • 중복되지 않는 유일한 값을 입력해야 하는 조건이다.
  • PRIMARY KEY 와 거의 비슷하며 차이점은 UNIQUE 는 NULL 값을 허용한다는 점이다.
  • NULL은 여러 개가 입력되어도 상관 없다. 
USE tableDB;
DROP TABLE IF EXISTS buyTBL, userTBL;
CREATE TABLE userTBL
(
	userID CHAR(8) NOT NULL PRIMARY KEY,
    name VARCHAR(10) NOT NULL,
    birthYear INT NOT NULL,
    email CHAR(30) NULL UNIQUE
);

DROP TABLE IF EXISTS userTBL;
(
	userID CHAR(8) NOT NULL PRIMARY KEY,
    name VARCHAR(10) NOT NULL,
    birthYear INT NOT NULL,
    email CHAR(30) NULL,
    CONSTRANINT AK_email UNIQUE (email)
);

이 두 문장은모두 동일한 결과를 나타낸다.

 


CHECK 제약 조건

  • CHECK 제약 조건은 입력되는 데이터를 점검하는 기능을 한다.
-- 출생연도가 1900년 이후 그리고 2023년 이전, 이름은 반드시 넣어야 함.
DROP TABLE IF EXISTS userTBL;
CREATE TABLE userTBL
(
	userID CHAR(8) PRIMARY KEY,
    name VARCHAR(10),
    birthYear INT CHECK (birthYear >= 1900 AND birthYear <= 2023),
    mobile1 CHAR(3) NULL,
    CONSTRAINT CK_name CHECK (name IS NOT NULL)
);

첫 번째 CHECK 제약 조건은 출생년도의 제한을 뒀다. 열을 정의한 후에 바로 CHECK 예약어로 조건을 지정했다.

두 번째 CHECK 제약 조건은 열을 모두 정의한 후에, 마지막에 추가하는 방식이다.

두 번째 방식은 CHECK 제약 조건의 이름은 직접 지정할 수 있다.

 

필요하다면 열을 정의한 후에 ALTER TABLE 문으로 제약 조건을 추가해도 된다.

 

-- 휴대폰 국번 체크
ALTER TABLE userTBL
	ADD CONSTRAINT CK mobile1
    CHECK (mobile2 IN ('010', '016', '017', '018', '019') ;

 

CHECK 제약 조건을 설정한 후에는, 제약조건에 위배되는 값은 입력이 되지 않는다.

CHECK에서 사용할 수 있는 조건은 SELECT문의 WHERE 구문에 들어오는 조건과 거의 비슷한 것이 들어오면 된다.

 

CHECK 제약 조건을 만들되 작동하지 않도록 하려면 제약 조건의 가장 뒤에 NOT ENFORCED 구문을 추가하면 되지만... 잘 쓰지않는다.

 


DEFAULT  정의

DEFAULT는 값을 입력하지 않았을 때 자동으로 입력되는 기본 값을 정의하는 방법이다.

USE tabledb;
ALTER TABLE usertbl
    ADD homepage VARCHAR(30)  -- 열추가
        DEFAULT 'http://www.공부.co.kr' -- 디폴트값
    NULL; -- Null 허용함

 

728x90
Comments