본문 바로가기

MySQL/MySQL Tip & Tech

[MySQL] 테이블 레이아웃 복사

원본 테이블의 데이터는 제외하고 레이아웃만 그대로 복사하여 새로운 테이블을 만들 일이 종종 있습니다.


MySQL에서는 어떻게 하는 지 알아봤습니다.



원본 테이블


1
2
3
4
5
6
7
8
CREATE TABLE table_copy (
    id int NOT NULL AUTO_INCREMENT,
    address varchar(255NOT 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;