[SQL] DDL (데이터 정의어)

제훈·2024년 6월 26일
0

SW공학, DB

목록 보기
11/21

데이터베이스를 정의하는 언어로, 데이터 생성 / 수정 / 삭제 등 데이터의 전체 골격을 결정하는 역할의 언어이다.

  • CREATE : 데이터베이스, 테이블 생성 역할
  • ALTER : 테이블 수정 역할
  • DROP : 데이터베이스, 테이블 삭제 역할
  • TRUNCATE : 테이블 초기화 역할

CREATE

테이블 생성하는 방법

CREATE TABLE if NOT EXISTS tb1 (
  pk INT PRIMARY KEY,
  fk INT,
  col1 VARCHAR(255),
  CHECK(col1 IN ('Y', 'N'))
) ENGINE = INNODB;

테이블의 구조 확인하기

DESC tb1;

SELECT * FROM tb1;


AUTO_INCREMENT

자동으로 데이터에 숫자가 증가되도록 메겨주는 기능이다.
Primary Key는 삭제해도 그 숫자를 메꿔서 사용하는 방식이면 안 된다.
그래서 AUTO_INCREMENT 를 사용해서 pk에 넣어주면 편리하다.

CREATE TABLE tb2 (
  pk INT PRIMARY KEY AUTO_INCREMENT,
  fk INT,
  col1 VARCHAR(255),
  CHECK(col1 IN ('Y', 'N'))
) ENGINE = INNODB;

구조 확인

DESC tb2;

활용

INSERT
  INTO tb2
VALUES
(
  NULL
, 2
, 'N'
);

위의 쿼리를 4번 실행하면 auto_increment 덕분에 자동으로 pk가 1씩 늘어나는 것을 확인할 수 있다.


ALTER

테이블을 수정하는 역할로, 컬럼들을 추가 / 수정 / 삭제 또한 수정에 포함되기 때문에 범용성이 넓다.

컬럼 추가

add를 사용해서 컬럼을 추가해보자.

ALTER TABLE tb2 ADD col2 INT NOT NULL;


컬럼 삭제

다시 컬럼을 지워보자.

ALTER TABLE tb2 DROP COLUMN col2;

처음 만들 때는 많은 것을 고려하고 만들어서 가능하면 ALTER를 사용하지 않는 것이 좋다.
ALTER는 고도화된 프로젝트에서나 사용하는 것이다.


컬럼 이름 및 컬럼 정의 변경

ALTER TABLE tb2 CHANGE COLUMN fk change_fk INT NOT NULL;


제약조건 제거하기 (primary key 제약조건 제거)

Primary Key 를 제거하려면

이러한 에러 메세지가 뜬다.

ALTER TABLE tb2 DROP PRIMARY KEY;

어떻게 하면 될까?

우선 auto_increment부터 modify 로 변경해줘야 한다.

ALTER TABLE tb2 MODIFY pk INT;

Extra에 없어진 것이 보인다. 이제 primary key도 지워보자.

ALTER TABLE tb2 DROP PRIMARY KEY;


TRUNCATE

TRUNCATE / DELETE / DROP

  1. TRUNCATE는 테이블의 데이터(데이터 및 관련 제약조건 관련 등 깔끔하게 제거) 초기화
    -> create 명령어 때처럼 행 전체가 비워진다.
    -> 자동 commit이 돼서 rollback이 안 된다.
  1. DELETE 는 TRUNCATE 처럼 데이터를 전체 삭제도 가능하지만, 조건을 걸어 일부 삭제도 가능하다.
    -> autocommit = on이면 자동 커밋돼서 TRUNCATE 와 (전체 - 일부) 차이뿐이다.
    -> 자동 commit은 안 되기 때문에 autocommit = off 면 rollback도 가능하다.
  1. DROP테이블 자체를 삭제

일단 임의의 테이블을 만들어봤다.

CREATE TABLE if NOT EXISTS tb3 (
  pk INT AUTO_INCREMENT,
  fk INT,
  col1 VARCHAR(255), CHECK(col1 IN ('Y', 'N')),
  PRIMARY KEY(pk)
) ENGINE = INNODB;

INSERT
  INTO tb3
VALUES
(
  NULL
, 2
, 'N'
);

이 상태에서 TRUNCATE 를 사용해보자.

TRUNCATE table tb3;

TRUNCATE 중요한 점

계정에게 DROP 권한이 있어야지 사용 가능하다.

참고 링크 : https://dev.mysql.com/doc/refman/8.4/en/truncate-table.html

DROP 후 CREATE 테이블하는 것처럼 진행된다고 생각을 하면 될 것 같다.

profile
백엔드 개발자 꿈나무

0개의 댓글