MySQL DDL 쿼리 정리 / 테이블 생성 및 수정 방법

MySQL DDL 쿼리

테이블 생성

CREATE TABLE `테이블명` (
  `컬럼명1` 컬럼타입 NOT NULL COMMENT '컬럼1 설명',
  `컬럼명2` 컬럼타입 NOT NULL COMMENT '컬럼2 설명',
  `컬럼명3` 컬럼타입 NOT NULL COMMENT '컬럼3 설명',
  PRIMARY KEY (`컬럼명1`,`컬럼명2`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='테이블 설명';

CHARSET=utf8mb4 설정 시 COLLATE을 명시하지 않으면 기본 Collation은 utf8mb4_general_ci으로 적용됩니다.

DB 기본 Collation 조회

SHOW VARIABLES LIKE 'collation_database';

데이터베이스 Collation이 지정되어 있어도, CREATE문에서 CHARSET 또는 COLLATE를 명시하면 변경됩니다.

테이블 Collation 변경

ALTER TABLE 테이블명 COLLATE=utf8mb4_unicode_ci;

테이블 문자셋 비교 및 규칙을 utf8mb4_unicode_ci으로 변경합니다.
쿼리에서 테이블 비교 및 조인 시 서로 Collation이 다르면 에러가 발생할 수 있습니다.

테이블 복제

CREATE TABLE 신규테이블명 AS SELECT * FROM 테이블명;

기존 테이블의 데이터를 포함하여 테이블 구조를 그대로 복제하는 명령어입니다.
Not Null, 디폴트, Comment도 복제되지만 PK 등 제약조건, PK 인덱스, 인덱스는 복제되지 않습니다.

데이터 없이 테이블 구조만 복제

CREATE TABLE 신규테이블명 AS SELECT * FROM 테이블명 WHERE 1=0;

테이블 삭제

DROP TABLE 테이블명;

테이블 컬럼 추가

ALTER TABLE 테이블명 ADD COLUMN 컬럼명 데이터타입(사이즈) COMMENT '컬럼 설명';

특정 컬럼 뒤 컬럼 추가

ALTER TABLE 테이블명 ADD COLUMN 컬럼명 데이터타입(사이즈) COMMENT '컬럼 설명' AFTER 특정컬럼명;

MySQL에서는 특정 컬럼 앞에 컬럼을 추가하는 BEFORE 키워드가 지원되지 않습니다.

테이블 컬럼 삭제

ALTER TABLE 테이블명 DROP COLUMN 컬럼명;

테이블 기본키 추가 (PK 추가)

ALTER TABLE 테이블명 ADD PRIMARY KEY (`컬럼명1`, `컬럼명2`);

테이블에 이미 존재하는 컬럼이어야 기본키로 설정할 수 있습니다.
PK 지정 시, PK 인덱스가 자동으로 추가됩니다.

작은따옴표 사용하여 PK 추가 시 에러

SQL Error [1064] [42000]: (conn=3941) You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''컬럼명')' at line 1

컬럼명을 `가 아니라 ‘로 감싸면 위와 같은 에러가 납니다.

PK 추가 시 제약조건 위반 에러

SQL Error [1062] [23000]: (conn=3941) Duplicate entry '1' for key 'PRIMARY'

각 행마다 PK 데이터 중복이 없도록 컬럼을 조합해서 한 쿼리로 함께 지정하면 됩니다.
PK 인덱스 (클러스터드 인덱스) 는 테이블 기본 데이터 구조를 변경하기 때문에 1개만 존재 가능합니다.

테이블 기본키 삭제 (PK 삭제)

ALTER TABLE 테이블명 DROP PRIMARY KEY;

테이블 외래키 추가 (FK 추가)

ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 FOREIGN KEY(컬럼명) REFERENCES 참조테이블명(참조컬럼명) ON DELETE CASCADE ON UPDATE CASCADE;

ON DELETE CASCADE 옵션은 참조테이블의 참조컬럼 값이 삭제되면, 참조하던 ROW들을 자동 삭제해 줍니다.

외래키 추가 시 에러메세지

Cannot add or update a child row: a foreign key constraint fails

외래키로 지정한 컬럼의 값으로 참조테이블 컬럼에 없는 값이 저장되어 있으면 외래키를 추가할 수 없습니다.
전체 INSERT문 추출하고 외래키 지정 후 제약조건에 맞는 INSERT문들만 실행하면 됩니다.

테이블 외래키 삭제 (FK 삭제)

ALTER TABLE 테이블명 DROP FOREIGN KEY 제약조건명;

Leave a comment