[MariaDB] 마리아DB 테이블 - UNIQUE, CHECK, DEFAULT, NULL 제약조건 (MySQL)
MariaDB는 데이터의 무결성을 위해서 다음의 6가지 제약조건을 제공합니다.
- PRIMARY KEY 제약조건
- FOREIGN KEY 제약조건
- UNIQUE 제약 조건
- CHECK 제약조건(MariaDB 10.2.1부터 지원, MySQL 8.0.16부터 지원)
- DEFAULT 정의
- NULL 값 허용
이번 포스팅에서는 UNIQUE, CHECK, DEFAULT NULL 제약조건에 대해서 설명하겠습니다.
UNIQUE 제약조건
UNIQUE 제약조건은 중복되지 않는 유일한 값을 입력해야 하는 조건 입니다.
이것은 기본키와 거의 비슷하지만 차이점은 UNIQUE는 NULL 값을 허용합니다.
대표적으로 E-MAIL 열을 UNIQUE로 많이 사용합니다.
아래는 테이블 생성시 UNIQUE 제약조건을 넣는 방법 2가지 예 입니다.
USE DB명; -- 사용할 DB선택
-- UNIQUE 제약 방법1
DROP TABLE IF EXISTS buyTBL, userTBL; -- 테이블이 존재하면 삭제
CREATE TABLE userTBL -- 테이블 생성
( userID CHAR(8) NOT NULL PRIMARY KEY, -- 기본키, NOT NULL
name VARCHAR(10) NOT NULL,
birthYear INT NOT NULL,
email CHAR(30) NULL UNIQUE -- UNIQUE, NULL 허용
);
-- UNIQUE 제약 방법2
DROP TABLE IF EXISTS userTBL; -- 테이블이 존재하면 삭제
CREATE TABLE userTBL -- 테이블 생성
( userID CHAR(8) NOT NULL PRIMARY KEY, -- 기본키, NOT NULL
name VARCHAR(10) NOT NULL,
birthYear INT NOT NULL,
email CHAR(30) NULL , -- NULL 허용
CONSTRAINT AK_email UNIQUE (email) -- 이름을 AK_email로 변경하고 UNIQUE로 제약(email을)
);
CHECK 제약조건
CHECK 제약 조건은 데이트럴 점검하는 기능입니다.
열 값이 입력될 때 특정 수치 이상은 입력을 못하게 막거나, 특정 시점 이후의 날짜만 입력가능하게 하거나 하는 조건을 걸수 있습니다.
아래는 출생년도의 제약조건과, 이름의 공란을 허용하지 않도록 하는 예제입니다.
DROP TABLE IF EXISTS userTBL; -- 테이블이 존재하면 삭제
CREATE TABLE userTBL -- 테이블 생성
( userID CHAR(8) PRIMARY KEY, -- 기본키
name VARCHAR(10) ,
birthYear INT CHECK (birthYear >= 1900 AND birthYear <= 2020), -- CHECK 제약조건 (생년이 1900이상 2020이하)
mobile1 char(3) NULL,
CONSTRAINT CK_name CHECK ( name IS NOT NULL) -- name의 이름을 CK_name으로 변경, NOT NULL로 변경
);
다음은 위에서 만든 mobile1(국번)에 CHECK 제약조건으로 수정하는 방법입니다.
ALTER TABLE userTbl -- 테이블 변경
ADD CONSTRAINT CK_mobile1 -- 추가, 이름을 CK_mobile1로 변경
CHECK (mobile1 IN ('010','011','016',,'019')) ; -- mobile1 안에 값은 010, 011, 016, 019만 입력되도록 제약
CHECK 제약 조건을 설정한 후에는, 제약조건에 위배되는 값은 입력이 안됩니다.
CHECK 제약 조건을 무시하려면 시스템 변수 중 check_constraint_checks 값을 0으로 설정해야 합니다.
SET check_constraint_checks = 0; -- CHECK 제약조건 비활성화
SET check_constraint_checks = 1; -- CHECK 제약조건 활성화
DEFAULT 정의
DEFAULT는 값을 입력하지 않을 경우, 자동으로 입력되는 기본값을 정의 하는 방법입니다.
아래 예는 출생연도를 입력하지 않으면 -1을 입력,
주소를 입력하지 않으면 "경기도"을 입력,
키를 입력하지 않으면 "175"가 입력되도록 한 DEFAULT 정의 입니다.
DROP TABLE IF EXISTS userTBL; -- 테이블이 존재하면삭제
CREATE TABLE userTBL -- 테이블 생성
( userID char(8) NOT NULL PRIMARY KEY,
name varchar(10) NOT NULL,
birthYear int NOT NULL DEFAULT -1, -- NOT NULL, 디폴트값 -1
addr char(2) NOT NULL DEFAULT '경기도', -- NOT NULL, 디폴트값 경기도
mobile1 char(3) NULL,
mobile2 char(8) NULL,
height smallint NULL DEFAULT 175, -- NULL 허용, 디폴트값 175
mDate date NULL
);
다른 방법으로는 ALTER 테이블로 변경하는 방법도 있습니다.
DROP TABLE IF EXISTS userTBL;
CREATE TABLE userTBL
( userID char(8) NOT NULL PRIMARY KEY,
name varchar(10) NOT NULL,
birthYear int NOT NULL ,
addr char(2) NOT NULL,
mobile1 char(3) NULL,
mobile2 char(8) NULL,
height smallint NULL,
mDate date NULL
);
ALTER TABLE userTBL -- 테이블 변경
ALTER COLUMN birthYear SET DEFAULT -1; -- 출생연도 디폴트값 -1
ALTER TABLE userTBL
ALTER COLUMN addr SET DEFAULT '경기도'; -- 주소 디폴트값 경기도
ALTER TABLE userTBL
ALTER COLUMN height SET DEFAULT 175; -- 키 디폴트값 175
디폴트값이 설정된 열에는 아래와 같은 방법으로 데이터 입력이 가능합니다.
-- default 문은 DEFAULT로 설정된 값을 자동 입력됩니다.
INSERT INTO userTBL VALUES ('KHJ', '김혜정', default, default, '011', '1234567', default, '2021.11.11');
-- 열이름이 명시되지 않으면 DEFAULT로 설정된 값을 자동 입력됩니다.
INSERT INTO userTBL(userID, name) VALUES('LKJ', '이경진');
-- 모든 값을 직접 입력하면 DEFAULT로 설정된 값은 무시됩니다.
INSERT INTO userTBL VALUES ('PSH', '박수환', 1981, '서울', '019', '9876543', 176, '2022.4.2');
NULL 값 허용
열 값에 NULL을 허용할지 허용하지 않을 지를 정할 수 있습니다. (NULL, NOT NULL)
PRIMARY KEY(기본키)의 경우는 반드시 NOT NULL 이어야 합니다.
PRIMARY KEY(기본키)열에 NOT NULL을 생략해도 NOT NULL로 인식됩니다.
다른열은 생략하면 NULL로 인식합니다.
NULL은 값이 아무것도 없다는 의미입니다. 0, ' '(공백)과는 의미가 다릅니다.
'MariaDB' 카테고리의 다른 글
[MariaDB] 마리아DB 테이블 - 임시테이블, 테이블삭제, 테이블수정 (MySQL) (0) | 2020.09.22 |
---|---|
[MariaDB] 마리아DB 테이블 - 외래키 제약조건(FOREIGN KEY) (MySQL) (3) | 2020.09.11 |
[MariaDB] 마리아DB 테이블 - 기본키 제약조건(PRIMARY KEY) (MySQL) (0) | 2020.09.11 |