[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 |
블로그의 정보
공부중임
구설구설