CS/데이터베이스

SQL(5) DDL (CREATE, ALTER, DROP, TRUNCATE)

hyomee2 2024. 7. 20. 17:04

1. DDL(Data Definition Language)

: 데이터베이스의 스키마를 정의하거나 수정

(1) CREATE

   : 테이블 생성

CREATE TABLE IF NOT EXISTS tb(  # 여기선 tb가 테이블 이름
  pk INT PRIMARY KEY, # 컬럼 레벨 제약 조건
  fk INT,
  col1 VARCHAR(255),
  CHECK(col1 IN ('Y', 'N'))  # 테이블 레벨 제약 조건 (col1에는 Y 아님 N만 들어갈 수 있다는 제약조건)
) ENGINE = INNODB;

 

- 테이블 구조 확인하기

# 아래 두 명령어는 같은 기능을 한다.
DESCRIBE tb;
DESC tb;

 

- 테이블이 잘 생성되었는지 INSERT를 해보자.

INSERT
	INTO tb
VALUES
(
    1
  , 10
  , 'Y'
);

 

(2) ALTER

: 테이블에 추가/변경/수정/삭제 (여기서 삭제는 테이블 자체를 삭제하는 게 아니라, 컬럼 등 테이블 내부의 것을 삭제하는 것)

1) 열 추가

ALTER TABLE tb2
ADD col2 INT NOT NULL;

DESC tb2;

 

2) 열 이름 및 데이터 형식 변경

ALTER TABLE tb2
CHANGE COLUMN fk change_fk INT NOT NULL; 
# fk라는 column을 change_fk로 column명을 바꾸고, 데이터 형식을 INT, NOT NULL로 변경해준다.

DESC tb2;

 

3) 컬럼 삭제

ALTER TABLE tb2
DROP COLUMN col2;

DESC tb2;

 

4) 제약조건 추가 및 삭제

# 아래 코드는 PRIMARY KEY 제약조건을 없애는 코드이다.
ALTER TABLE tb2
DROP PRIMARY KEY;
# 근데 일단 이렇게 하면 실행이 안되는데, 
# 그 이유는 지금 PRIMARY KEY인 pk에 AUTO_INCREMENT 설정이 있기 때문이다.

# 따라서 pk의 AUTO_INCREMENT 설정을 제거해주자.
ALTER TABLE tb2
MODIFY pk INT;

# 그리고 다시 PRIMARY KEY 제약조건을 없애는 코드를 작성해준다.
ALTER TABLE tb2
DROP PRIMARY KEY;

 

5) 컬럼 다중 추가

ALTER TABLE tb2
ADD col3 DATE NOT NULL,
ADD col4 TINYINT NOT NULL;

 

(3) DROP

: 테이블 삭제

DROP TABLE if EXISTS tb2;  # if exists는 optional
DROP TABLE if EXISTS tb, tb2, tb3; # 여러개의 테이블 한 번에 삭제도 가능

 

(4) TRUNCATE

TRUNCATE tb;

 

 * DELETE와 TRUNCATE의 차이점

- DELETE는 존재하는 행을 하나씩 지우고, TRUNCATE는 테이블 자체를 삭제하고 테이블을 재생성

- TRUNCATE는 ROLLBACK해도 살아나지 않고, 진짜 테이블을 RESET하고 싶을 때 사용하면 된다.

  TRUNCATE DELETE
COMMIT AUTO COMMIT 사용자 COMMIT
ROLLBACK 불가능 COMMIT 이전에 가능
인덱스 삭제 삭제 X
제약조건 삭제 삭제 X
컬럼 삭제 삭제 X
수행결과 테이블을 초기 상태로 만든다 데이터 삭제
로그 X O
처리속도 빠름 느림

 

'CS > 데이터베이스' 카테고리의 다른 글

SQL 실습(3)  (0) 2024.07.21
SQL(6) 제약 조건  (0) 2024.07.21
SQL (4) TRANSACTION  (0) 2024.07.17
SQL (3) DML  (0) 2024.07.17
SQL 실습 (2)  (0) 2024.07.17