[MySQL] 테이블 제약조건

Main·2024년 8월 27일
0

MySQL

목록 보기
4/13
post-thumbnail

제약조건(Constraints)

제약조건(Constraints)은 데이터베이스의 무결성을 유지하기 위해 테이블의 데이터에 적용되는 규칙입니다. 제약조건을 사용하면 데이터의 유효성을 검증하고, 특정 조건을 만족하지 않는 데이터를 삽입하거나 수정하는 것을 방지할 수 있습니다.

NOT NULL

NOT NULL 제약조건은 특정 열에 NULL 값이 저장되는 것을 허용하지 않습니다.

필수 정보를 담고 있는 열에 사용되며, 예를 들어 사용자 ID, 이메일 주소 등이 여기에 해당할 수 있습니다.

CREATE TABLE users (
    user_id INT NOT NULL,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100)
);

UNIQUE

 UNIQUE 제약조건은 특정 열의 모든 값이 유일해야 함을 보장합니다. 중복된 값이 존재할 수 없습니다.

중복을 허용하지 않아야 하는 데이터에 사용되며, 예를 들어 사용자 이메일 주소나 주민등록번호 등이 있을 수 있습니다.

CREATE TABLE users (
    user_id INT NOT NULL,
    username VARCHAR(50) UNIQUE,
    email VARCHAR(100) UNIQUE
);

PRIMARY KEY

PRIMARY KEY(기본 키) 는 테이블의 각 행을 고유하게 식별하는 열입니다. 기본 키는 자동으로 NOT NULL과 UNIQUE 제약조건을 포함합니다.

각 레코드를 유일하게 식별해야 할 때 사용하며, 일반적으로 ID 필드가 기본 키로 설정됩니다.

CREATE TABLE users (
    user_id INT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100)
);

FOREIGN KEY

FOREIGN KEY(외래 키)는 한 테이블의 열이 다른 테이블의 기본 키를 참조하도록 설정하는 제약조건입니다. 이를 통해 두 테이블 간의 관계를 정의하고, 참조 무결성을 유지합니다.

FOREIGN KEY 제약조건을 설정할 때 참조되는 테이블의 필드는 반드시 UNIQUEPRIMARY KEY 제약 조건이 설정되어 있어야 합니다.

관계형 데이터베이스에서 데이터 간의 연결을 관리하며, 예를 들어 주문 테이블에서 고객 ID가 고객 테이블의 기본 키를 참조할 수 있습니다.

CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    user_id INT,
    order_date DATE,
    FOREIGN KEY (user_id) REFERENCES users(user_id)
);

ON DELETE 및 ON UPDATE

FOREIGN KEY 제약조건에 의해 참조되는 테이블에서 데이터의 수정이나 삭제가 발생하면, 참조하고 있는 테이블의 데이터도 영향을 받습니다. 이때 참조하고 있는 테이블의 동작은 다음 키워드를 사용하여 미리 설정할 수 있습니다.

  • ON DELETE 설정 동작: 참조되는 테이블의 값이 삭제될 경우의 동작 설정
  • ON UPDATE 설정 동작: 참조되는 테이블의 값이 수정될 경우의 동작 설정

설정 동작

CASCADE: 참조되는 테이블에서 데이터를 삭제하거나 수정하면, 참조하는 테이블에서도 삭제와 수정이 같이 이루어집니다.

SET NULL: 참조되는 테이블에서 데이터를 삭제하거나 수정하면, 참조하는 테이블의 데이터는 NULL로 변경됩니다.

NO ACTION: 참조되는 테이블에서 데이터를 삭제하거나 수정해도, 참조하는 테이블의 데이터는 변경되지 않습니다.

SET DEFAULT: 참조되는 테이블에서 데이터를 삭제하거나 수정하면, 참조하는 테이블의 데이터는 필드의 기본값으로 설정됩니다.

RESTRICT: 참조하는 테이블에 데이터가 남아 있으면, 참조되는 테이블의 데이터를 삭제하거나 수정할 수 없습니다.

CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    user_id INT,
    order_date DATE,
    FOREIGN KEY (user_id) REFERENCES users(user_id) ON UPDATE CASCADE ON DELETE RESTRICT
);

orders 테이블의 ID 필드가 참조하고 있는 users 테이블의 ID 값이 수정되면, orders 테이블의 ID 값도 같이 수정됩니다. 그리고 orders 테이블의 레코드 중에서 users 테이블의 레코드가 ID 필드를 참조하는 레코드는 삭제할 수 없습니다.


CHECK

CHECK 제약 조건은 특정 열의 값이 특정 조건을 만족해야 함을 보장합니다. 예를 들어, 나이 열이 0 이상이어야 한다는 조건을 설정할 수 있습니다.

데이터의 유효성을 검사하기 위해 사용되며, 값의 범위나 특정 형식을 제한할 때 유용합니다.

CREATE TABLE users (
    user_id INT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    age INT CHECK (age >= 0)
);

AUTO_INCREMENT

AUTO_INCREMENT 제약조건은 기본 키(Primary Key)로 사용되는 정수형 컬럼에 적용되며, 새로운 레코드가 추가될 때마다 해당 컬럼의 값이 자동으로 증가하여 고유한 값을 생성합니다.

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL
);

이 테이블에 새로운 사용자를 추가할 때, id 값을 명시하지 않으면 데이터베이스가 자동으로 1씩 증가한 값을 할당합니다.


DEFAULT

DEFAULT 제약조건은 데이터베이스 테이블의 컬럼에 기본값을 설정하는 기능입니다. 이를 통해 사용자가 데이터를 삽입할 때 특정 컬럼의 값이 제공되지 않으면 자동으로 설정된 기본값이 사용됩니다.

CREATE TABLE users (
    user_id INT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    status VARCHAR(20) DEFAULT 'active'
);

이 테이블에 데이터를 삽입할 때, status 컬럼의 값을 명시하지 않으면 active라는 기본값이 자동으로 할당됩니다.


참고 사이트

https://inpa.tistory.com/entry/MYSQL-📚-제약-조건-정리

profile
함께 개선하는 프론트엔드 개발자

0개의 댓글