주로 열에 저장되는 데이터들을 제어하는 규칙을 정의하는 것을 제약이라고 한다.
제약은 데이터의 무결성을 유지하기 위해 필요하다.
데이터의 정확성, 일관성을 유지하는 것을 데이터의 무결성이 유지된다고 생각하면 된다.
데이터의 무결성은 데이터의 가치, 신뢰성면에서 꼭 필요한 속성이다.
제약은 컬럼 레벨과 테이블 레벨로 테이블 생성 시 줄 수 있다.
제약의 종류는 다음과 같다.
- NOT NULL
- UNIQUE
- PRIMARY KEY
- FOREIGN KEY
- CHECK
- DEFAULT
NULL CONSTRAINT
NOT NULL 제약은 특정 열이 NULL값을 가지지 못하도록 하는 제약이다.
CREATE TABLE student (
...,
student_name VARCHAR(20) NOT NULL,
student_age INTEGER,
...);
다음과 같이 NULL 제약을 추가 / 삭제할 수 있다.
ALTER TABLE student
MODIFY student_name VARCHAR(30),
MODIFY student_age INTEGER NOT NULL;
student_name 열은 NULL이 허용되고, student_age 열은 NULL을 허용하지 않게 됐다.
UNIQUE
특정 열(하나 이상)안에서 중복된 값을 가지지 못하게 하는 제약이다.
CREATE TABLE student (
...,
school_name VARCHAR(30) NOT NULL UNIQUE,
student_age INTEGER,
...);
다음과 같이 나중에 추가할 수 있다.
ALTER TABLE student
MODIFY student_age INTEGER UNIQUE;
또한, 여러 열을 묶어서 UNIQUE 제약을 줄 수도 있다.
ALTER TABLE student
ADD CONSTRAINT unq_constraint UNIQUE(school_name, stduent_age);
'CONSTRAINT 제약명'은 설정하고자 하는 제약에 이름을 붙이기 위한 것이다.
위 커리는 school_name, student_age에 같이 UNIQUE제약을 줬다.
이 경우는 school_name 열과 student_age 열 하나의 묶음으로 생각해야 한다.
다시 말해, school_name 열의 값과 student_age 열의 값을 합쳐서 봤을 때 중복된 값이 없어야 한다.
school_name | student_age |
A중학교 | 14 |
A중학교 | 15 |
위와 같은 데이터가 있다고 한다면,
school_name 열로 봤을 땐 중복된 값이 존재하지만 각각의 student_age 열의 값은 다르기 때문에
위에서 지정한 unq_constraint 제약을 위반하지 않는다.
DEFAULT
데이터에 특정한 값이 지정되지 않은 경우 기본적으로 입력되는 값을 제약한다.
CREATE TABLE student (
...,
student_address VARCHAR(30) DEFAULT '대한민국' NOT NULL,
student_age INTEGER NOT NULL,
...);
DEFAULT가 생략되면 각 자료형에 정해진 기본값이 설정된다.
다음과 같이 DEFAULT 제약을 추가 / 삭제할 수 있다.
ALTER TABLE student
MODIFY student_age INTEGER DEFAULT 0 NOT NULL;
ALTER TABLE student
ALTER student_address DROP DEFAULT;
CHECK
CHECK 제약은 작성한 조건에 맞는 데이터 값을 저장하도록 하는 제약이다.
CREATE TABLE student (
...,
student_age INTEGER DEFAULT 0 NOT NULL
CONSTRAINT ch_constraint CHECK (stduent_age > 0),
...,
school_name VARCHAR(30)
CHECK (school_name IN ('a중학교', 'b중학교', 'c중학교'),
...);
student_age 열에는 0보다 큰 값만 저장할 수 있고,
school_name 열에는 a중학교, b중학교, c중학교 값만 저장할 수 있다.
PRIMARY KEY와 FOREIGN KEY는 따로 상세하게 추후 작성할 예정
참조
https://www.w3resource.com/mysql/creating-table-advance/constraint.php
'CS > DB' 카테고리의 다른 글
(MySQL) INNER JOIN (0) | 2022.08.12 |
---|---|
인덱스 (0) | 2021.12.06 |
DELETE / TRUNCATE / DROP 비교 (0) | 2021.12.04 |
테이블 생성 / 삭제 / 변경 (0) | 2021.12.04 |
데이터베이스 계층 구조 (0) | 2021.12.04 |
댓글