본문 바로가기

데이터/SQL

[혼공] 5-2장 테이블 제약조건

제약 조건(constraint)

- 데이터의 무결성을 지키기 위해 제한하는 조건 

 

1. 기본 키 제약 조건 

 

기본키(Primary Key)

 

- 데이터를 구분할 수 있는 식별자 

- ex) 회원 테이블의 아이디, 학생 테이블의 학번, 직원 테이블의 사번 

- 중복될 수 없음 

- NULL 값 입력 불가 

- 기본 키로 생성한 것은 자동으로 클러스터형 인덱스가 생성

- 테이블은 기본 키를 1개만 가질 수 있음

 

1) CREATE TABLE에서 기본 키 설정

CREATE TALBE member
( mem_id CHAR(8) NOT NULL PRIMARY KEY,
 ...
);

- 회원 아이디(mem_id)는 회원 테이블(member)의 기본키 

 

2) ALTER TABLE에서 기본 키 설정 

DROP TABLE IF EXISTS member;
CREATE TABLE member
( mem_id CHAR(8) NOT NULL,
  mem_name VARCHAR(10) NOT NULL,
  height TINYINT UNSIGNED NULL
);
ALTER TABLE member; -- member를 변경
    ADD CONSTRAINT -- 제약조건 추가 
    PRIMARY KEY (mem_id)l -- mem_id열에 기본 키 제약조건 설정

 

2. 외래 키 제약조건 

 

외래 키(Foreign Key)

 

- 두 테이블 사이의 관계를 연결해주고, 그 결과 데이터의 무결성을 보장해 줌

- 외래 키가 설정된 열은 꼭 다른 테이블의 기본 키와 연결됨

- 기준 테이블 : 기본 키가 있는 회원 테이블

- 참조 테이블 : 외래 키가 있는 구매 테이블 

- 참조 테이블이 참조하는 기준 테이블의 열은 반드시 기본 키나 고유 키로 설정되어 있어야 함

 

1) CREATE TABLE에서  외래 키 설정

 

- CREATE TABLE 끝에 FOREIGN KEY 키워드 설정

- FOREIGN KEY(열_이름) REFERENCES 기준_테이블(열_이름)

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) REFERNECES member(mem_id)
);

 

2) ALTER TABLE에서 외래 키 설정

 

DROP TABLE IF ECISTS 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

- 기준 테이블의 데이터가 삭제되면 참조 테이블의 데이터도 삭제 

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;

 

3. 고유 키 제약 조건 

 

고유 키(Unique)

 

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

- NULL 값 허용

- 고유키는 여러 개 설정 가능

 

ex) 회원 테이블에 이메일 주소는 중복되지 않으므로 고유키로 설정

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
);

 

4. 체크 제약 조건 

 

- 입력되는 데이터를 점검

- 열의 정의 뒤에 CHECK(조건)을 추가 

 

ex) 평균 키는 반드시 100 이상의 값만 입력되도록 설정

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),
  phine1 CHAR(3) NULL
);

 

- ALTER문으로 체크제약 조건 추가 

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

 

5. 기본 값 정의 

 

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

height TINYINT UNSIGNED NULL DEFAULT 160

- ALTER 문에서 기본값 지정

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