쌓고 쌓다

[SQL] 고유 키(Unique), 체크(Check), 기본값(Default) 제약조건 본문

프로그래밍/SQL

[SQL] 고유 키(Unique), 체크(Check), 기본값(Default) 제약조건

승민아 2022. 7. 19. 01:39

고유 키 제약조건

'중복되지 않는 유일한 값'을 입력해야 하는 조건이다.

기본 키와 유사하지만, 고유 키 제약은 NULL 값을 허용한다.

기본 키는 테블에 1개만 설정해야 하지만, 고유 키는 여러 개를 설정 가능하다.

 

회원 테이블에 email은 중복되지 않으므로 고유 키로 설정해보자.

CREATE TABLE member
(
    mem_id CHAR(8) NOT NULL PRIMARY KEY,
    mem_name VARCHAR(10) NOT NULL,
    height TINYINT UNSIGNED NULL,
    email CHAR(30) NULL UNIQUE
);

 

데이터를 입력해보자.

INSERT INTO member VALUES('BLK', '블랙핑크', 163, 'BLK@email.com');
INSERT INTO member VALUES('TWC', '트와이스', 167, NULL);
INSERT INTO member VALUES('APN', '에이핑크', 164, 'BLK@email.com');

3번째 데이터 입력시 중복된 이메일을 넣으려고 하자 에러가 뜬다.

 

체크 제약조건

'입력되는 데이터를 점검하는 기능'

평균 키(height)에 마이너스 값을 넣지 못하게하거나, 연락처 02, 031, 041, 055중 하나만 입력되도록 설정

열의 정의 뒤에 CHECK(조건)을 추가해주면 된다.

DROP TABLE IF EXISTS member;
CREATE TABLE member
(
    mem_id CHAR(8) NOT NULL PRIMARY KEY,
    mem_name VARCHAR(10) NOT NULL,
    height TINYINT UNSIGNED NULL CHECK (height >= 100),
    phone1 CHAR(3) NULL
);

 

데이터를 넣어보겠다.

INSERT INTO member VALUES('BLK', '블랙핑크', 163, NULL);
INSERT INTO member VALUES('TWC', '트와이스', 99, NULL);

트와이스 데이터를 넣을때 에러가 뜬다. Check constraint 에러는 정상 범위가 아니기에 뜨는 것이다.

 

연락처를 정해진 내용중에서만 입력하게 ALTER TABLE로 추가해보겠다.

ALTER TABLE member
    ADD CONSTRAINT
    CHECK (phone1 IN ('02', '031', '032', '054', '055', '061'));

 

IN()은 괄호 안에 있는 값 중 하나와 같아야 참이다.

 

데이터를 넣어보겠다.

INSERT INTO member VALUES('TWC', '트와이스', 167, '02');
INSERT INTO member VALUES('OMY', '오마이걸', 167, '010');

'010'은 체크 제약조건에 맞지 않으므로 에러가 뜬다.

 

기본값 정의 제약조건

'값을 입력하지 않았을때 자동으로 입력될 값을 미리 지정'

DROP TABLE IF EXISTS member;
CREATE TABLE member
(
    mem_id CHAR(8) NOT NULL PRIMARY KEY,
    mem_name VARCHAR(10) NOT NULL,
    height TINYINT UNSIGNED NULL DEFAULT 160,
    phone1 CHAR(3) NULL
);

 

+ ALTHER TABLE 사용 시 열에 DEFAULT를 지정한다면 ALTER COLUMN 문을 사용해야 한다.

예로, 연락처의 국번을 입력하지 않으면 자동으로 02가 입력되도록 할 수 있다.

ALTER TABLE member
      ALTER COLUMN phone1 SET DEFAULT '02';

 

기본값이 설정된 열에 기본값이 입력되길 원한다면 default라고 써주고, 만약 원하는 값이 있다면 그냥 입력.

INSERT INTO member VALUES('RED', '레드벨벳', 161, '054');
INSERT INTO member VALUES('SPC', '우주소녀', default, default);

 

널 값 허용

널 값을 허용하려면 그냥 NULL을 사용하거나 생략하고, 허용하지 않는다면 NOT NULL을 사용한다.

PRIMARY KEY가 설정된 열에는 자동으로 NOT NULL이 설정된다.

NULL 값은 공백(' ') 이나 0과는 다르다.

 

모든 내용은 '혼자 공부하는 SQL' 도서를 기반으로 학습 후 정리한 내용입니다. 

Comments