공부한거 정리하는 노트에요

[DB] 데이터 무결성과 일관성을 위한 제약 조건과 데이터 타입

by 구설구설

데이터의 무결성과 일관성

 

데이터의 무결성

데이터가 정확하고 신뢰할 수 있고 유효성을 유지해야 하는 것을 의미한다.

 

데이터의 일관성

트랜잭션(일련의 데이터베이스 작업)이 종료된 이후에 데이터베이스 상태가 정의된 규칙을 항상 만족하는 상태로 남아야 한다는 것을 의미한다.

 

제약 조건

제약 조건은 데이터베이스 테이블에 저장될 수 있는 데이터의 규칙을 정의한다.

제약 조건을 통해 데이터의 무결성과 일관성을 유지할 수 있다.

 

1. PRIMARY KEY

  • 테이블의 각 행을 고유하게 식별하는 열을 정의하는 제약 조건.
  • ~PRIMARY KEY~로 설정된 열은 중복 값을 가질 수 없으며, ~NULL~ 값도 허용되지 않는다.
  • ~UNIQUE~와 ~NOT NULL~을 포함하는 복합 제약 조건이다.
CREATE TABLE students (
    student_id INT PRIMARY KEY, -- 중복 불가, NULL 불가
    name VARCHAR(50)
);

 

2. FOREIGN KEY

  • 한 테이블의 열이 다른 테이블의 ~PRIMARY KEY~ 또는 ~UNIQUE~키와 연결되는 제약 조건.
  • ~FOREIGN KEY~를 통해 테이블 간의 관계를 설정할 수 있다.
  • ~FOREIGN KEY~가 참조하는 값이 삭제되거나 업데이트 될 때의 동작을 정의할 수 있다.
    • ~CASCADE~: 삭제 
    • ~RESTRICT~: 거부
    • ~SET NULL~: NULL로 값 설정
      • SET NULL은 해당하는 열이 NULL을 허용해야 한다.
    • ~SET DEFAULT~: 정의된 기본값으로 설정
      • SET DEFAULT는 미리 정의된 기본 값이 존재해야한다.
    • ~NO ACTION~: 아무 일도 일어나지 않음
CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    customer_id INT,
    FOREIGN KEY (customer_id) REFERENCES customers(customer_id) 
    -- customers 테이블의 customer_id를 참조
    ON DELETE CASCADE 
	ON UPDATE CASCADE
    -- CASCADE: 삭제
);

 

3. UNIQUE

  • 한 열에 중복된 값을 허용하지 않도록 설정하는 제약 조건.
  • 한 테이블에 ~PRIMARY KEY~는 유일하지만, ~UNIQUE~열은 여러 개 일 수 있다.
CREATE TABLE employees (
    employee_id INT PRIMARY KEY,
    email VARCHAR(100) UNIQUE
);

 

4. NOT NULL

  • 열에 ~NULL~ 값을 허용하지 않도록 설정하는 제약 조건.
  • 열을 필수 값으로 지정할 수 있다.
CREATE TABLE products (
    product_id INT PRIMARY KEY,
    product_name VARCHAR(100) NOT NULL
);

 

5. CHECK

  • 열에 입력되는 값이 만족해야 하는 규칙을 정의하는 제약 조건.
  • 값이 범위나 조건을 충족하는지 검사하고, 충족하지 않는다면 에러를 발생시킨다.
CREATE TABLE accounts (
    account_id INT PRIMARY KEY,
    balance DECIMAL(10, 2) CHECK (balance >= 0)
);

 

6. DEFAULT

  • 열에 값이 입력되지 않았을 때 기본값을 자동으로 설정하는 제약 조건.
  • ~NOT NULL~과는 다르게 ~NULL~을 입력하면 그대로 들어간다.
CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    order_date DATE DEFAULT CURRENT_DATE
);

 

7. AUTO_INCREMENT

  • 숫자 타입의 열이 자동으로 값이 증가하도록 설정하는 제약 조건
CREATE TABLE users (
    user_id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL
);

 

데이터 타입

테이블의 각 열에 저장될 데이터의 유형을 정의한다.

 

1. INT

  • 정수 데이터를 저장하기 위한 데이터 타입.
CREATE TABLE students (
    student_id INT,
    age INT
);

 

2. DATE

  • 날짜를 저장하기 위한 데이터 타입
  • 일반적으로 ~YYYY-MM-DD~ 형식으로 저장한다.
  • 날짜와 시간을 모두 저장하는 ~DATETIME~, ~TIMESTAMP~와 시간 정보만 저장하는 ~TIME~ 타입도 있다.
CREATE TABLE employees (
    employee_id INT,
    hire_date DATE
);

 

3. CHAR

  • 고정된 길이의 문자열을 저장하는 데이터 타입.
  • 문자열이 할당된 길이보다 짧을 경우 남은 공간을 공백으로 채운다.
  • 길이가 고정된 문자열을 저장할 때 적합하다.
CREATE TABLE countries (
    country_code CHAR(2),
    country_name VARCHAR(50)
);

 

4. VARCHAR

  • 가변 길이의 문자열을 저장하는 데이터 타입.
  • 문자열의 길이가 가변적일 때 사용되며, 메모리와 저장 공간을 보다 효율적으로 사용한다.
    • 문자열을 저장할 때 문자열의 길이도 저장한다.
    • 고정된 길이의 ~CHAR~에 비해 약간의 오버헤드가 발생한다.
CREATE TABLE users (
    username VARCHAR(30),
    email VARCHAR(50)
);

 

5. DECIMAL

  • 소수점이 포함된 숫자 데이터를 저장하기 위한 데이터
  • ~DECIMAL(정수 자리 수, 소수 자리 수)~로 정의된다.
CREATE TABLE products (
    product_id INT,
    price DECIMAL(10, 2) -- ex) 12345678.12, 98765.43, 0.99
);

'CS > DB' 카테고리의 다른 글

[DB] SQL 문자열 패턴, 범위 검색, 데이터 정렬 및 그룹화  (0) 2024.11.06
[DB] SQL과 주요 SQL 명령어  (0) 2024.10.09

블로그의 정보

공부중임

구설구설

활동하기