코딩 스쿨 SQL

언어선택 : HTMLCSSJAVAJAVASCRIPTMYSQLSQL PHP

SQL Constraints

SQL Constraints: 제약 조건

  • *SQL Constraints(제약 조건)**는 테이블에 저장될 데이터의 무결성정확성을 보장하기 위해 사용됩니다. 제약 조건을 통해 허용되는 데이터 범위를 정의하고, 데이터를 저장할 때 유효성을 검사합니다. 제약 조건은 테이블 생성 시테이블 수정 시 지정할 수 있으며, 열 또는 테이블 전체에 적용될 수 있습니다.

1. SQL 제약 조건의 종류

  1. NOT NULL: 열에 NULL 값이 들어가지 않도록 제한합니다.
  2. UNIQUE: 열에 중복된 값이 저장되지 않도록 제한합니다.
  3. PRIMARY KEY: 테이블에서 고유한 값을 가지며, NULL을 허용하지 않는 열입니다.
  4. FOREIGN KEY: 다른 테이블의 기본 키 또는 고유 키를 참조하여 두 테이블 간의 관계를 설정합니다.
  5. CHECK: 열의 값이 특정 조건을 만족해야 합니다.
  6. 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_idproduct_id의 조합을 기본 키로 설정합니다.


2.4 FOREIGN KEY

FOREIGN KEY 제약 조건은 한 테이블의 열이 다른 테이블의 기본 키 또는 고유 키를 참조하도록 하여 두 테이블 간의 관계를 설정합니다.

문법

CREATE TABLE 테이블_이름 (
    열_이름 데이터_타입,
    FOREIGN KEY (열_이름) REFERENCES 참조_테이블(참조_열_이름)
);

예제: employees 테이블의 department_iddepartments 테이블의 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_iddepartments 테이블의 department_id를 참조하는 외래 키 관계를 설정합니다.


5. 요약

  • NOT NULL: 열에 NULL 값을 허용하지 않음.
  • UNIQUE: 열의 값이 고유해야 함.
  • PRIMARY KEY: 고유하고 NULL이 허용되지 않는 기본 키.
  • FOREIGN KEY: 다른 테이블의 기본 키를 참조하여 테이블 간의 관계를 설정.
  • CHECK: 열의 값이 특정 조건을 만족해야 함.
  • DEFAULT: 값을 입력하지 않으면 기본값이 자동으로 삽입됨.

제약 조건은 데이터베이스의 무결성을 유지하고 유효한 데이터만 저장되도록 보장하는 중요한 도구입니다. 각 제약 조건을 적절하게 사용하여 데이터를 관리하고, 데이터 손상이나 불일치를 방지할 수 있습니다.


copyright ⓒ 스타트코딩 all rights reserved.
이메일 : startcodingim@gamil.com