[sql] 제약 조건과 데이터 검증

데이터베이스에서 데이터의 정확성과 일관성을 유지하기 위해 제약 조건과 데이터 검증은 매우 중요합니다. 제약 조건은 데이터베이스 테이블에 적용되는 규칙으로, 데이터의 유형, 일관성, 무결성을 보장하기 위해 사용됩니다. 예를 들어, 특정 열에 고유한 값을 갖도록 설정하거나, NULL 값을 허용하지 않도록 설정할 수 있습니다.

제약 조건의 종류

1. NOT NULL 제약 조건

NOT NULL 제약 조건은 특정 열이 NULL 값을 허용하지 않도록 설정합니다. 이는 해당 열에 값이 항상 존재해야 함을 의미합니다.

예시:

CREATE TABLE customers (
    id INT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    age INT
);

위 예시에서 name 열은 NOT NULL 제약 조건을 가지고 있으므로, 해당 열에는 NULL 값을 입력할 수 없습니다.

2. UNIQUE 제약 조건

UNIQUE 제약 조건은 특정 열의 값이 고유하도록 설정합니다. 이는 중복된 값을 허용하지 않으며, 해당 열의 값들은 모두 고유해야 합니다.

예시:

CREATE TABLE employees (
    id INT PRIMARY KEY,
    email VARCHAR(50) UNIQUE
);

위 예시에서 email 열은 UNIQUE 제약 조건을 가지고 있으므로, 중복된 이메일 주소를 입력할 수 없습니다.

3. PRIMARY KEY 제약 조건

PRIMARY KEY 제약 조건은 특정 열을 기본 키로 설정합니다. 이는 해당 열의 값이 고유하고 NULL 값을 허용하지 않도록 설정합니다.

예시:

CREATE TABLE products (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    price DECIMAL(10,2)
);

위 예시에서 id 열은 PRIMARY KEY 제약 조건을 가지고 있으므로, 고유한 값이 할당되어야 하며 NULL 값을 허용하지 않습니다.

데이터 검증

데이터베이스에서 데이터를 검증하기 위해 사용할 수 있는 몇 가지 방법이 있습니다.

1. CHECK 제약 조건

CHECK 제약 조건은 특정 열에 대한 데이터 검증 규칙을 정의합니다. 이를 통해 해당 열에 입력되는 값이 일정한 조건을 충족해야 함을 보장할 수 있습니다.

예시:

CREATE TABLE students (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    age INT CHECK (age >= 18)
);

위 예시에서 age 열은 CHECK 제약 조건을 가지고 있으며, 18 이상의 값만 입력할 수 있습니다.

2. 트리거

트리거는 특정 데이터베이스 이벤트가 발생할 때 자동으로 실행되는 프로시저입니다. 이를 활용하여 데이터 검증 규칙을 정의하고, 이벤트 발생 시 데이터의 유효성을 검사하거나 조작할 수 있습니다.

예시:

CREATE TRIGGER check_balance
BEFORE UPDATE ON accounts
FOR EACH ROW
BEGIN
    IF NEW.balance < 0 THEN
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '잔액이 부족합니다';
    END IF;
END;

위 예시에서 accounts 테이블의 balance 열이 업데이트될 때마다 트리거가 실행되며, 잔액이 음수인 경우에는 에러 메시지를 반환합니다.

결론

제약 조건과 데이터 검증은 데이터베이스의 일관성과 무결성을 유지하는 데 매우 중요한 요소입니다. 데이터의 유효성을 검증하고 정확성을 보장하기 위해 적절한 제약 조건과 데이터 검증 방법을 사용하는 것이 좋습니다.


참고 자료: