MySQL : 제약 조건
MySQL 열 옵션과 제약 조건
열 옵션
DEFAULT 옵션
- 열에 기본값을 설정할 수 있다.
- 이 옵션은 열 값이 없는 행을 삽입할 경우 열에 널 값이 입력되는 것을 방지한다.
- 리터럴과 표현식을 기본값으로 사용할 수 있다.
- 기본 표현식은 해당 열의 데이터 유형과 일치해야 한다.
- 예제:
1 2 3 4 5 6 7 8
CREATE TABLE Department ( deptno TINYINT, hiredate DATETIME DEFAULT CURRENT_TIMESTAMP ); INSERT INTO Department(deptno, hiredate) VALUES(10, DEFAULT);
제약 조건 (Constraints)
제약 조건은 테이블 열에 적용되어 데이터 무결성을 유지하는 규칙이다.
특징
- 잘못된 DML 문 실행을 방지한다.
- 제약 조건에 대한 정보는 데이터 사전에 저장된다.
- 필요에 따라 활성화 또는 비활성화할 수 있다.
- 결과는 즉시 사용자에게 표시된다.
- 하나의 열에 여러 제약 조건을 적용할 수 있다.
- 부적절한 데이터 삽입, 수정 및 삭제를 방지한다.
- 제약 조건은 테이블 레벨이나 열 레벨에서 정의할 수 있다.
- 종속성이 있는 경우 삭제를 방지한다.
- 삽입, 수정, 삭제 작업 시 규칙을 적용한다.
- 제약 조건은 RDBMS마다 다를 수 있다.
- Oracle에서는 제약 조건 이름을 지정하지 않으면 SYS_Cnumber 형식으로 자동 생성된다.
제약 조건의 종류
- PRIMARY KEY (PK)
- FOREIGN KEY (FK)
- UNIQUE (UK)
- NOT NULL (NN)
- CHECK (CK)
제약 조건 생성
열 레벨 제약 조건
1
2
3
4
5
6
CREATE TABLE Student
(
hakbun CHAR(4) PRIMARY KEY,
name VARCHAR(20) NOT NULL,
kor TINYINT NOT NULL
);
테이블 레벨 제약 조건
1
2
3
4
5
6
7
CREATE TABLE Student
(
hakbun CHAR(4),
name VARCHAR(20) NOT NULL,
kor TINYINT(3) NOT NULL,
CONSTRAINT Student_hakbun_pk PRIMARY KEY(hakbun)
);
PRIMARY KEY
- 테이블의 각 행을 고유하게 식별한다.
- 하나의 테이블에 하나의 기본 키 제약만 정의할 수 있다.
- UNIQUE 및 NOT NULL 제약 조건을 결합한다.
- 자동으로 UNIQUE INDEX를 생성한다.
- 열 레벨 및 테이블 레벨 모두에서 정의할 수 있다.
- 예제:
1 2 3 4 5 6 7 8 9 10 11 12
CREATE TABLE Test ( id NUMBER(3) PRIMARY KEY, name VARCHAR2(20) ); CREATE TABLE Test1 ( id NUMBER(3), name VARCHAR2(20), CONSTRAINT test1_id_pk PRIMARY KEY(id) );
FOREIGN KEY
- 기본 키를 다른 테이블의 외래 키로 복사하여 테이블 간의 관계를 정의한다.
- 참조하는 테이블(자식 테이블)에서 정의된다.
- 예제:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
CREATE TABLE dept10 ( deptno TINYINT PRIMARY KEY, dname VARCHAR(15), LOCAL VARCHAR(1) ); CREATE TABLE emp10 ( empno INT PRIMARY KEY, ename VARCHAR(15), deptno TINYINT, CONSTRAINT FOREIGN KEY(deptno) REFERENCES dept10(deptno) );
UNIQUE
- 열 또는 열 집합의 모든 값의 고유성을 보장한다.
- 하나의 테이블에 여러 개의 UNIQUE 제약 조건을 정의할 수 있다.
- NULL 값을 허용한다.
- 자동으로 INDEX를 생성한다.
- 예제:
1 2 3 4 5 6 7
CREATE TABLE dept_clone ( deptno SMALLINT, dname VARCHAR(20), loc VARCHAR(20), CONSTRAINT dept_clone_deptno_uk UNIQUE(deptno) );
NOT NULL
- 열이 NULL 값을 가질 수 없도록 한다.
- 열 레벨에서만 정의할 수 있다.
- 예제:
1 2 3 4 5 6 7 8
CREATE TABLE dept_copy1 ( deptno SMALLINT, dname VARCHAR(20) NOT NULL DEFAULT 'Accounting', loc VARCHAR(20), CONSTRAINT dept_copy1_deptno_pk PRIMARY KEY(deptno), CONSTRAINT dept_copy1_loc_uk UNIQUE(loc) );
CHECK
- 각 행이 만족해야 하는 조건을 정의한다.
- 예제:
1 2 3 4 5 6 7
CREATE TABLE emp2 ( empno INT PRIMARY KEY, ename VARCHAR(10) NOT NULL, sal DECIMAL(7,2) CHECK(sal BETWEEN 500 AND 5000), gender CHAR(1) CHECK(gender IN('M', 'F')) );
제약 조건 추가 및 삭제
제약 조건 추가
1
2
ALTER TABLE emp1
ADD CONSTRAINT emp1_deptno_fk FOREIGN KEY(deptno) REFERENCES dept(deptno);
제약 조건 삭제
1
2
ALTER TABLE emp_copy
DROP CONSTRAINT emp_copy_ename_uk;
This post is licensed under CC BY 4.0 by the author.