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

+ Recent posts