SQL Constraints
SQL Constraints: 제약 조건
- *SQL Constraints(제약 조건)**는 테이블에 저장될 데이터의 무결성과 정확성을 보장하기 위해 사용됩니다. 제약 조건을 통해 허용되는 데이터 범위를 정의하고, 데이터를 저장할 때 유효성을 검사합니다. 제약 조건은 테이블 생성 시나 테이블 수정 시 지정할 수 있으며, 열 또는 테이블 전체에 적용될 수 있습니다.
1. SQL 제약 조건의 종류
- NOT NULL: 열에 NULL 값이 들어가지 않도록 제한합니다.
- UNIQUE: 열에 중복된 값이 저장되지 않도록 제한합니다.
- PRIMARY KEY: 테이블에서 고유한 값을 가지며, NULL을 허용하지 않는 열입니다.
- FOREIGN KEY: 다른 테이블의 기본 키 또는 고유 키를 참조하여 두 테이블 간의 관계를 설정합니다.
- CHECK: 열의 값이 특정 조건을 만족해야 합니다.
- DEFAULT: 열의 기본값을 설정하여, 값을 입력하지 않았을 때 자동으로 삽입되는 값을 지정합니다.
2. 주요 제약 조건 사용법
2.1 NOT NULL
NOT NULL 제약 조건은 열에 NULL 값을 허용하지 않도록 제한합니다.
문법
CREATE TABLE 테이블_이름 (
열_이름 데이터_타입 NOT NULL
);
예제: employees
테이블의 name
열에 NOT NULL 적용
CREATE TABLE employees (
employee_id INT,
name VARCHAR(100) NOT NULL, -- NULL 값 허용하지 않음
department VARCHAR(50)
);
이 명령은 employees 테이블의 name 열이 NULL 값을 허용하지 않도록 합니다.
2.2 UNIQUE
UNIQUE 제약 조건은 열에 중복된 값이 들어갈 수 없도록 제한합니다. 하나의 테이블에 여러 개의 UNIQUE 열을 설정할 수 있습니다.
문법
CREATE TABLE 테이블_이름 (
열_이름 데이터_타입 UNIQUE
);
예제: employees
테이블의 email
열에 UNIQUE 제약 조건 적용
CREATE TABLE employees (
employee_id INT,
name VARCHAR(100),
email VARCHAR(100) UNIQUE -- 중복된 값 허용하지 않음
);
이 명령은 employees 테이블의 email 열이 중복된 값을 가질 수 없도록 설정합니다.
2.3 PRIMARY KEY
PRIMARY KEY 제약 조건은 고유한 값을 가지며 NULL을 허용하지 않는 열을 지정합니다. 테이블에는 단 하나의 기본 키만 설정할 수 있습니다.
문법
CREATE TABLE 테이블_이름 (
열_이름 데이터_타입 PRIMARY KEY
);
예제: employees
테이블에서 employee_id
를 PRIMARY KEY로 설정
CREATE TABLE employees (
employee_id INT PRIMARY KEY, -- 고유한 값이며, NULL을 허용하지 않음
name VARCHAR(100)
);
이 명령은 employee_id 열을 기본 키로 설정하여, 각 직원의 고유한 식별자를 만듭니다.
복합 기본 키 (여러 열을 조합하여 기본 키 설정)
CREATE TABLE order_details (
order_id INT,
product_id INT,
PRIMARY KEY (order_id, product_id) -- 복합 기본 키
);
이 명령은 order_id와 product_id의 조합을 기본 키로 설정합니다.
2.4 FOREIGN KEY
FOREIGN KEY 제약 조건은 한 테이블의 열이 다른 테이블의 기본 키 또는 고유 키를 참조하도록 하여 두 테이블 간의 관계를 설정합니다.
문법
CREATE TABLE 테이블_이름 (
열_이름 데이터_타입,
FOREIGN KEY (열_이름) REFERENCES 참조_테이블(참조_열_이름)
);
예제: employees
테이블의 department_id
를 departments
테이블의
department_id
를 참조하는 외래 키로 설정
CREATE TABLE departments (
department_id INT PRIMARY KEY,
department_name VARCHAR(100)
);
CREATE TABLE employees (
employee_id INT PRIMARY KEY,
name VARCHAR(100),
department_id INT,
FOREIGN KEY (department_id) REFERENCES departments(department_id)
);
이 명령은 employees 테이블의 department_id 열이 departments 테이블의 department_id를 참조하도록 설정합니다. 이는 두 테이블 간의 부서 정보 관계를 정의합니다.
2.5 CHECK
CHECK 제약 조건은 열의 값이 특정 조건을 만족하도록 제한합니다.
문법
CREATE TABLE 테이블_이름 (
열_이름 데이터_타입,
CHECK (조건)
);
예제: employees
테이블에서 salary
가 0 이상이어야 하는 조건 추가
CREATE TABLE employees (
employee_id INT,
name VARCHAR(100),
salary DECIMAL(10, 2),
CHECK (salary >= 0) -- 급여는 0 이상이어야 함
);
이 명령은 salary 열에 0 이상의 값만 허용하도록 설정합니다.
2.6 DEFAULT
DEFAULT 제약 조건은 열의 기본값을 설정하여, 데이터를 삽입할 때 값이 주어지지 않으면 기본값을 자동으로 삽입합니다.
문법
CREATE TABLE 테이블_이름 (
열_이름 데이터_타입 DEFAULT 기본값
);
예제: employees
테이블의 hire_date
에 기본값 설정
CREATE TABLE employees (
employee_id INT,
name VARCHAR(100),
hire_date DATE DEFAULT CURRENT_DATE -- 기본값으로 현재 날짜 설정
);
이 명령은 hire_date 열에 값이 주어지지 않았을 때 현재 날짜가 기본값으로 삽입되도록 설정합니다.
3. 제약 조건 수정 및 제거
3.1 제약 조건 추가 (ALTER TABLE)
기존 테이블에 제약 조건을 추가하려면 ALTER TABLE 문을 사용합니다.
문법
ALTER TABLE 테이블_이름
ADD CONSTRAINT 제약조건_이름 제약조건_타입 (열_이름);
예제: employees
테이블에 email
열에 UNIQUE 제약 조건 추가
ALTER TABLE employees
ADD CONSTRAINT unique_email UNIQUE (email);
3.2 제약 조건 제거 (ALTER TABLE)
기존 테이블에서 제약 조건을 제거할 수 있습니다. 기본 키와 외래 키는 각각 DROP PRIMARY KEY, DROP FOREIGN KEY로 제거할 수 있으며, 다른 제약 조건은 DROP CONSTRAINT로 제거합니다.
문법
ALTER TABLE 테이블_이름
DROP CONSTRAINT 제약조건_이름;
예제: employees
테이블에서 unique_email
제약 조건 제거
ALTER TABLE employees
DROP CONSTRAINT unique_email;
예제: 기본 키 제거
ALTER TABLE employees
DROP PRIMARY KEY;
예제: 외래 키 제거
ALTER TABLE employees
DROP FOREIGN KEY fk_department_id;
4. 실전 예제
예제 1: employees
테이블 생성 및 제약 조건 설정
CREATE TABLE employees (
employee_id INT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE,
salary DECIMAL(10, 2) CHECK (salary >= 0),
hire_date DATE DEFAULT CURRENT_DATE
);
- PRIMARY KEY:
employee_id
는 고유한 값이어야 하며, NULL을 허용하지 않음. - NOT NULL:
name
은 NULL 값을 허용하지 않음. - UNIQUE:
email
은 중복된 값을 허용하지 않음. - CHECK:
salary
는 0 이상이어야 함. - DEFAULT:
hire_date
는 기본적으로 현재 날짜를 사용.
예제 2: 외래 키가 있는 테이블 생성
CREATE TABLE departments (
department_id INT PRIMARY KEY,
department_name VARCHAR(100)
);
CREATE TABLE employees (
employee_id INT PRIMARY KEY,
name VARCHAR(100),
department_id INT,
FOREIGN KEY (department_id) REFERENCES departments(department_id)
);
이 예제는 employees 테이블에서 department_id가 departments 테이블의 department_id를 참조하는 외래 키 관계를 설정합니다.
5. 요약
- NOT NULL: 열에 NULL 값을 허용하지 않음.
- UNIQUE: 열의 값이 고유해야 함.
- PRIMARY KEY: 고유하고 NULL이 허용되지 않는 기본 키.
- FOREIGN KEY: 다른 테이블의 기본 키를 참조하여 테이블 간의 관계를 설정.
- CHECK: 열의 값이 특정 조건을 만족해야 함.
- DEFAULT: 값을 입력하지 않으면 기본값이 자동으로 삽입됨.
제약 조건은 데이터베이스의 무결성을 유지하고 유효한 데이터만 저장되도록 보장하는 중요한 도구입니다. 각 제약 조건을 적절하게 사용하여 데이터를 관리하고, 데이터 손상이나 불일치를 방지할 수 있습니다.