제약 조건(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';
'데이터 > SQL' 카테고리의 다른 글
[혼공] 6-1장 인덱스 개념 (0) | 2023.08.14 |
---|---|
[혼공] 5-3장 가상의 테이블 뷰 (0) | 2023.08.13 |
[혼공] 4-3장 SQL 프로그래밍 (0) | 2023.08.12 |
[혼공] 4-2장 두 테이블을 묶는 조인 (0) | 2023.08.08 |
[혼공] 4-1장 MySQL의 데이터 형식 (0) | 2023.08.07 |