코드 그라데이션
Day07-3. 제약 조건 (3) - UNIQUE, CHECK 제약 조건, DEFAULT 본문
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
'Database > Mega-MySQL' 카테고리의 다른 글
Day09. Database와 Java 연동 예제 - 전화번호부 (1) | 2023.06.27 |
---|---|
Day08. 뷰 테이블 (0) | 2023.06.26 |
Day07-2. 제약 조건 (2) - 외래 키 제약 조건 (0) | 2023.06.25 |
Day06-07. 제약 조건(1) - 기본 키 제약 조건 (0) | 2023.06.22 |
Day06. SELF JOIN, UNION(ALL), (NOT)IN (0) | 2023.06.22 |
Comments