1. CREATE문
1) 테이블 주요 데이터 타입
데이터타입 | 설명 |
CHAR(n) | 고정 길이 문자열 (n : 1~255) |
VARCHAR(n) | 가변 길이 문자열 (n : ~65535) |
DECIMAL(p, s) | 숫자형 최대 65자리까지 (p : 전체자릿수, s : 소수점 자릿수) |
INT(n) | 정수형(자릿수) |
DATE | 날짜와 시간 |
TIMESTAMP | 날짜와 시간 (나노초 정밀도) |
LONGBLOB | 문자열 데이터 (최대 4GB) |
2) 예시 테이블 생성 구문
CREATE TABLE employees (
employee_id INT(6) PRIMARY KEY,
first_name VARCHAR(20),
last_name VARCHAR(25) NOT NULL,
email VARCHAR(25) NOT NULL UNIQUE,
phone_number VARCHAR(15),
hire_date DATE NOT NULL,
job_id VARCHAR(10) NOT NULL,
salary INT(8),
commission_pct DECIMAL(2, 2),
manager_id INT(6),
department_id INT(4)
);
3) 테이블 이름 생성 규칙
→ 다양한 데이터베이스 시스템에서 작동되도록 테이블 이름을 설정하고, 팀 내에서 일관된 명명 규칙을 유지하는 것이 중요하다
① 유효한 문자 사용 : 테이블은 알파벳, 숫자, 밑줄로 구성, 특수문자나 공백은 X
② 첫 글자 : 테이블 이름은 알파벳 문자로 시작해야 함, 숫자나 밑줄로 시작 X
③ 길이 제한 : 일반적으로 30자 이내
④ 의미 있는 이름 사용 : 데이터를 담고 있는 내용을 명확하게 설명할 수 있도록 축약어보다 전체 단어를 사용하는 것이 좋음
⑤ 단수/복수형 일관성 : 팀 내에서 사용하는 규칙을 명확하게 따르는 것이 좋음
⑥ 예약어 피하기 : 예약어를 사용하면 SQL 쿼리 작성 시 혼란을 초래할 수 있으므로 피하기
4) 제약조건
- 데이터베이스 테이블의 열에 적용되어 데이터의 무결성을 유지하는데 도움을 줌
- 데이터베이스에 저장되는 값들이 특정 규칙에 부합하도록 강제할 수 있음
PRIMARY KEY | 테이블의 각 행을 고유하게 식별할 수 있는 키 |
UNIQUE | 열의 모든 값이 고유한지 확인 |
FOREIGN KEY | 다른 테이블의 기본키에 대한 참조를 설정하여 관계 정의 |
CHECK | 열의 값이 특정 조건을 만족하는지 확인 |
NOT NULL | 열의 값이 NULL이 아닌지 확인 |
2. ALTER문
→ 기존의 데이터베이스 객체를 수정하는데 사용하며 테이블, 인덱스, 시퀀스, 뷰 등의 객체 변경 가능
1) 주요 사용 사례
① 테이블에 열 추가, 수정, 삭제
② 제약조건 추가, 수정, 삭제
③ 인덱스 상태 변경 (활성화 또는 비활성화)
④ 시퀀스의 시작값, 증가값, 최대값 등 변경
⑤ 뷰 정의 변경
2) ALTER TABLE
- 기존 테이블을 수정하는 데 사용
- 열 추가, 열 삭제, 열 데이터 타입 변경
- 제약 조건 추가, 제약 조건 삭제, 제약 조건 수정 등
-- 열 추가
ALTER TABLE employees ADD (middle_name VARCHAR(20));
-- 열 삭제
ALTER TABLE employees DROP COLUMN middle_name;
-- 데이터 타입 변경
ALTER TABLE employees MODIFY first_name VARCHAR(30);
-- 제약 조건 추가
테이블명 제약조건별칭 걸테이블
ALTER TABLE employees ADD CONSTRAINT emp_email_unique UNIQUE (email);
-- 제약 조건 삭제
ALTER TABLE employees DROP CONSTRAINT emp_email_unique;
3) ALTER VIEW
- 기존 뷰를 수정하는 데 사용
- 뷰의 정의를 변경하거나 뷰와 관련된 제약 조건을 추가/삭제할 수 있음
ALTER VIEW employee_view COMPILE;
3. DROP문
1) DROP TABLE
- 테이블을 완전 삭제하는 데 이용
- 테이블과 해당 테이블에 관련된 모든 데이터, 인덱스, 제약조건, 트리거, 권한 등을 제거
- 삭제한 테이블은 복구할 수 없음
DROP TABLE employees;
2) RENAME
- 테이블 이름 변경
- 테이블의 구조나 데이터에 영향을 주지 않고 오직 이름만 변경
RENAME employees TO staff;
3) TRUNCATE TABLE
- 테이블의 모든 데이터를 빠르게 삭제
- 테이블의 구조, 인덱스, 제약조건 등은 그대로 유지하면서 오직 데이터만 삭제
TRUNCATE TABLE employees;
4) DROP과 TRUNCATE의 차이점
DROP | TRUNCATE | |
복구 가능성 | 테이블 자체 삭제 → 복구 불가 | 테이블의 데이터 삭제 → 복구 가능 |
영향 받는 객체 | 테이블과 관련된 인덱스, 제약조건, 트리거, 권한 등 모든 객체 삭제 | 오직 데이터만 삭제, 다른 객체는 그대로 둠 |
속도 | 시간이 다소 걸림 | 모든 데이터를 빠르게 삭제 |
트랜잭션 및 롤백 | 트랜잭션 사용, 롤백 가능 | 트랜잭션 사용안함, 롤백 불가능 |
용도 | 테이블을 완전히 제거할 때 사용 | 테이블의 데이터만 빠르게 삭제하려는 경우 사용 |
4. ON DELETE 옵션
→ RDBMS에서 외래키 제약조건에 사용되며 참조된 레코드가 삭제될 때 어떻게 처리할지를 지정하는 옵션
ON DELETE 옵션을 적절하게 사용하면 데이터의 무결성을 보장할 수 있다.
① Cascading : 참조된 레코드가 삭제될 때 해당 레코드를 참조하는 다른 레코드도 함께 삭제
CREATE TABLE Orders (
order_id int PRIMARY KEY,
customer_id int REFERENCES Customers(customer_id) ON DELETE CASCADE,
order_date date,
total_amount decimal(10,2)
);
customer_id 컬럼은 Customers 테이블의 customer_id 컬럼을 참조하는 외래키이다.
ON DELETE CASCADE 옵션으로 인해 Customers 테이블의 레코드 삭제 시 해당 customaer_id를 참조하는 Orders 테이블의 레코드도 함께 삭제된다.
② Restrict : 참조된 레코드가 삭제될 때 해당 레코드를 참조하는 다른 레코드를 삭제 X
CREATE TABLE Orders (
order_id int PRIMARY KEY,
customer_id int REFERENCES Customers(customer_id) ON DELETE RESTRICT,
order_date date,
total_amount decimal(10,2)
);
ON DELETE RETRICT 옵션으로 인해 Customers 테이블의 레코드 삭제 시 Orders 테이블의 레코드는 삭제되지 않는다.
③ SET NULL : 참조된 레코드가 삭제될 때 해당 레코드를 참조하는 다른 레코드의 컬럼 값을 NULL로 설정
CREATE TABLE Orders (
order_id int PRIMARY KEY,
customer_id int REFERENCES Customers(customer_id) ON DELETE SET NULL,
order_date date,
total_amount decimal(10,2)
);
ON DELETE SET NULL 옵션으로 인해 Customers 테이블의 레코드 삭제 시 Orders 테이블 레코드의 customer_id 컬럼 값이 NULL로 설정된다.
④ SET DEFAULT : 참조된 레코드가 삭제될 때 해당 레코드를 참조하는 다른 레코드의 컬럼 값을 기본값으로 설정
CREATE TABLE Orders (
order_id int PRIMARY KEY,
customer_id int REFERENCES Customers(customer_id) ON DELETE SET DEFAULT,
order_date date,
total_amount decimal(10,2)
);
ON DELETE SET DEFAULT 옵션으로 인해 Customers 테이블의 레코드 삭제 시 Orders 테이블 레코드의 customer_id 컬럼 값이 기본값으로 설정된다.
⑤ NO ACTION : 참조된 레코드가 삭제될 때 해당 레코드를 참조하는 다른 레코드를 삭제 X
CREATE TABLE Orders (
order_id int PRIMARY KEY,
customer_id int REFERENCES Customers(customer_id) ON DELETE NO ACTION,
order_date date,
total_amount decimal(10,2)
);
ON DELETE NO ACTION 옵션으로 인해 Customers 테이블의 레코드 삭제 시 Orders 테이블 레코드를 삭제하지 않는다.
'네트워크캠퍼스 > DATABASE' 카테고리의 다른 글
WHERE절 (0) | 2024.02.16 |
---|---|
DML (0) | 2024.02.15 |
관계형 데이터베이스 (0) | 2024.02.14 |
데이터 모델링의 중요 개념 (0) | 2024.02.13 |
데이터 모델의 이해 (0) | 2024.02.13 |