[SQL] - 제약조건

유현민·2022년 3월 19일
0

SQL

목록 보기
28/34

1. 제약조건 종류

  • PRIMARY KEY
  • FOREIGN KEY
  • UNIQUE
  • CHECK
  • DEFAULT
  • NULL

2. 기본키 제약조건

  • 데이터를 구분할 수 있는 식별자를 기본키 라고 부란다.
  • 중복 X, NULL X

방법 1

USE naver_db;
DROP TABLE IF EXISTS buy, member;
CREATE TABLE member
( mem_id CHAR(8) NOT NULL PRIMARY KEY,
mem_name VARCHAR(10) NOT NULL,
height TINYINT UNSIGNED NULL
);

방법 2

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

방법 3

CREATE TABLE member
( mem_id CHAR(8) NOT NULL,
mem_name VARCHAR(10) NOT NULL,
height TINYINT UNSIGNED NULL
);
ALTER TABLE member
ADD CONSTRAINT
PRIMARY KEY (mem_id);

기본 키에 이름 지정하기

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

3. 외래 키 제약조건

  • 외래 키 제약조건은 두 테이블 사이의 관계를 연결해주고, 그 결과 데이터의 무결성을 보장해주는 역할을 한다.

방법1

DROP TABLE IF EXISTS buy, member;
CREATE TABLE member
(mem_id char(8) NOT NULL PRIMARY KEY,
mem_name VARCHAR(10) NOT NULL,
height TINYINT UNSIGNED NULL
);
CREATE TABLE buy
(num INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
mem_id CHAR(8) NOT NULL,
prod_name CHAR(6) NOT NULL,
FOREIGN KEY(mem_id) REFERENCES member(mem_id)
);

방법2

DROP TABLE IF EXISTS buy;
CREATE TABLE buy
(num INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
mem_id CHAR(8) NOT NULL,
prod_name CHAR(8) NOT NULL
);
ALTER TABLE buy
ADD CONSTRAINT
FOREIGN KEY(mem_id)
REFERENCES member(mem_id);
  • 삭제를 하려고 하면 오류가 난다.
    기준테이블의 열 이름이 변경될 때 참조 테이블의 열 이름이 자동으로 변경되게 하려면??
DROP TABLE if EXISTS buy;
CREATE TABLE buy
(num INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
mem_id CHAR(8) NOT NULL,
prod_name CHAR(6) NOT NULL
);
ALTER TABLE buy
ADD CONSTRAINT
FOREIGN KEY(mem_id) REFERENCES member(mem_id)
ON UPDATE CASCADE
ON DELETE CASCADE;

4. 고유 키 제약조건

  • 유일 값 입력, NULL 허용
DROP TABLE if EXISTS buy, member;
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, 'pink@gmail.com');
INSERT INTO member VALUES('TWC', '트와이스', 167, NULL);
INSERT INTO member VALUES('APN', '에이핑크', 164, 'pink@gmail.com');

이메일은 UNIQUE 제약조건이라 들어가지 않는다.
NULL값은 삽입 가능


5. 체크 제약조건

  • 입력되는 데이터를 점검하는 기능.
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);

트와이스 키가 100 이하라 들어가지 않는다.

  • 필요하면 ALTER TABLE 문으로 제약조건 추가해도 된다.
ALTER TABLE member                                   
ADD CONSTRAINT                                       
CHECK(phone1 IN('02','031','032','054','055','061'));

6. 기본값 정의

  • 값을 입력하지 않았을 때 자동으로 입력될 값을 미리 지정해 놓는 방법.
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
);
  • ALTER TABLE 문으로 추후에 추가해도 된다.
ALTER TABLE member                  
ALTER COLUMN phone SET DEFAULT '02';
  • 테스트
INSERT INTO member VALUES('RED', '레드벨벳', 161, '054');
INSERT INTO member VALUES('SPC', '우주소녀', DEFAULT, DEFAULT);
SELECT * FROM member;
profile
smilegate megaport infra

0개의 댓글