MySQL Constraints
MySQL Constraints: 데이터 무결성을 유지하기 위한 제약 조건
Constraints는 MySQL에서 테이블의 데이터에 대한 규칙을 정의하여 데이터 무결성을 보장하는 데 사용됩니다. 제약 조건은 데이터베이스 설계에서 중요한 역할을 하며, 잘못된 데이터 입력을 방지하고 데이터 간의 관계를 명확히 합니다. 이 가이드는 MySQL에서 사용할 수 있는 주요 제약 조건의 종류와 그 사용법을 설명합니다.
1. 제약 조건의 종류
1.1. NOT NULL
NOT NULL 제약 조건은 해당 열이 NULL 값을 가질 수 없도록 합니다. 이 제약 조건을 설정하면 반드시 유효한 값을 입력해야 합니다.
예제
CREATE TABLE users (
id INT AUTO_INCREMENT,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL,
PRIMARY KEY (id)
);
위 쿼리는 username
과 email
열에 NOT NULL 제약 조건을 추가하여 NULL 값을 허용하지 않습니다.
1.2. UNIQUE
UNIQUE 제약 조건은 특정 열의 값이 고유해야 함을 보장합니다. 즉, 중복된 값이 입력될 수 없습니다.
예제
CREATE TABLE users (
id INT AUTO_INCREMENT,
username VARCHAR(50) UNIQUE,
email VARCHAR(100) NOT NULL,
PRIMARY KEY (id)
);
이 쿼리는 username
열에 UNIQUE 제약 조건을 추가하여, 같은 사용자 이름이 두 번 입력될 수 없도록 합니다.
1.3. PRIMARY KEY
PRIMARY KEY 제약 조건은 테이블의 각 레코드를 고유하게 식별하는 데 사용됩니다. 기본 키는 NULL 값을 가질 수 없으며, 테이블에서 유일해야 합니다.
예제
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL
);
위 쿼리는 id
열을 기본 키로 설정합니다. 이 열은 NULL 값을 허용하지 않으며, 각 레코드는 고유합니다.
1.4. FOREIGN KEY
FOREIGN KEY 제약 조건은 다른 테이블의 기본 키를 참조하여 두 테이블 간의 관계를 정의합니다. 이를 통해 데이터의 무결성을 보장할 수 있습니다.
예제
CREATE TABLE orders (
order_id INT AUTO_INCREMENT,
user_id INT,
order_date DATETIME DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (order_id),
FOREIGN KEY (user_id) REFERENCES users(id)
);
이 쿼리는 orders
테이블의 user_id
열이 users
테이블의 id
열을 참조하도록 설정합니다. 이 경우,
users
테이블에 존재하지 않는 사용자 ID를 orders
테이블에 입력할 수 없습니다.
1.5. CHECK
CHECK 제약 조건은 특정 조건을 만족하는 데이터만 입력될 수 있도록 합니다. 즉, 입력되는 값이 제약 조건을 만족해야 합니다.
예제
CREATE TABLE products (
product_id INT AUTO_INCREMENT,
product_name VARCHAR(100) NOT NULL,
price DECIMAL(10, 2) CHECK (price >= 0),
PRIMARY KEY (product_id)
);
이 쿼리는 price
열에 대해 가격이 0 이상이어야 한다는 조건을 설정합니다. 음수 가격은 허용되지 않습니다.
2. 제약 조건 사용 시 주의사항
- 성능 고려: 제약 조건을 사용하면 데이터 무결성이 보장되지만, 성능에 영향을 줄 수 있습니다. 특히 대량의 데이터가 입력되는 경우 성능 저하가 발생할 수 있습니다.
- 데이터 무결성: 제약 조건을 설정할 때는 데이터 간의 관계를 잘 이해하고 있어야 하며, 이를 통해 데이터의 일관성을 유지할 수 있습니다.
- 수정 및 삭제: 제약 조건이 설정된 열을 수정하거나 삭제할 때는 관련된 제약 조건을 먼저 제거해야 할 수 있습니다.
3. 제약 조건 수정 및 삭제
테이블을 생성한 후에도 제약 조건을 추가하거나 수정할 수 있습니다. 이를 위해 ALTER TABLE 문을 사용할 수 있습니다.
3.1. 제약 조건 추가
ALTER TABLE users
ADD CONSTRAINT unique_email UNIQUE (email);
이 쿼리는 users
테이블의 email
열에 UNIQUE 제약 조건을 추가합니다.
3.2. 제약 조건 삭제
ALTER TABLE users
DROP INDEX unique_email;
이 쿼리는 users
테이블에서 unique_email
제약 조건을 삭제합니다.
4. 요약
MySQL Constraints는 데이터베이스의 데이터 무결성을 유지하기 위한 필수적인 요소입니다. 다양한 제약 조건을 통해 데이터 입력 시 유효성을 검사하고, 잘못된 데이터가 입력되는 것을 방지할 수 있습니다.
- NOT NULL: NULL 값 금지.
- UNIQUE: 중복 값 금지.
- PRIMARY KEY: 레코드 고유 식별.
- FOREIGN KEY: 테이블 간의 관계 정의.
- CHECK: 특정 조건을 만족하는 데이터만 입력 허용.
MySQL의 제약 조건을 활용하여 효율적이고 안정적인 데이터베이스 설계를 할 수 있습니다.