원본 테이블의 데이터는 제외하고 레이아웃만 그대로 복사하여 새로운 테이블을 만들 일이 종종 있습니다.
MySQL에서는 어떻게 하는 지 알아봤습니다.
원본 테이블
1 2 3 4 5 6 7 8 | CREATE TABLE table_copy ( id int NOT NULL AUTO_INCREMENT, address varchar(255) NOT NULL, address_type tinyint UNSIGNED NOT NULL DEFAULT 0, PRIMARY KEY (id) ); INSERT table_copy (address) VALUES ('test'); | cs |
방법 1 : CREATE TABLE ~ AS SELECT ~ LIMIT 0;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | CREATE TABLE table_copy_1 AS SELECT * FROM table_copy LIMIT 0; SHOW CREATE TABLE table_copy_1; /* CREATE TABLE `table_copy_1` ( `id` int(11) NOT NULL DEFAULT '0', `address` varchar(255) NOT NULL, `address_type` tinyint(3) unsigned NOT NULL DEFAULT '0' ) ENGINE=InnoDB DEFAULT CHARSET=utf16 */ | cs |
이런 문제점이 발생합니다.
- PRIMARY KEY 보존되지 않음
- AUTO_INCREMENT 보존되지 않음
- AUTO_INCREMENT 속성이 DEFAULT 0로 변경됨
방법 2 : CREATE TABLE ~ LIKE ~ ;
1 2 3 4 5 6 7 8 9 10 11 12 13 | CREATE TABLE table_copy_2 LIKE table_copy; SHOW CREATE TABLE table_copy_2; /* CREATE TABLE `table_copy_2` ( `id` int(11) NOT NULL AUTO_INCREMENT, `address` varchar(255) NOT NULL, `address_type` tinyint(3) unsigned NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf16 */ | cs |
결론
테이블의 구조 그대로 복사할 때는 CREATE TABLE ~ LIKE ~ ;
원본 테이블에서 일부 컬럼을 선택해 복사할 때는 CREATE TABLE ~ AS SELECT ~ LIMIT 0;
'MySQL > MySQL Tip & Tech' 카테고리의 다른 글
[MySQL] 사용자 로그 테이블 - (1) Primary Key가 필요한가? (16) | 2018.07.13 |
---|---|
[MySQL] 5.7에서 JSON 을 JSON_TABLE() 함수 없이 테이블로 변환하기 (0) | 2018.07.03 |
[MySQL] 명명 규칙 (Naming Convention) (8) | 2018.06.15 |
[MySQL] Materialized Path를 사용한 계층형 모델 (3) | 2018.04.16 |
[MySQL] 날짜 함수 (0) | 2015.06.29 |