MySQL复制表

当我们在线上环境需要复制一个表的时候需要怎么做呢?

使用如下命令?

CREATE TABLE target SELECT * from source

这是不行的,因为我们需要完整的复制数据表的内容,包括主键、索引以及默认值等,如果这样简单的复制会丢失一些内容。

如何做才能实现完整的复制呢?

这分为三步:

第一步,获取数据表的完整结构

使用以下命令获得建表语句

SHOW CREATE TABLE docs;

CREATE TABLE `docs` (
	`id` INT ( 6 ) UNSIGNED NOT NULL,
	`rev` INT ( 3 ) UNSIGNED NOT NULL,
	`content` VARCHAR ( 200 ) NOT NULL,
PRIMARY KEY ( `id`, `rev` ) 
) ENGINE = INNODB DEFAULT CHARSET = utf8

第二步,修改sql的数据表名,创建新表

修改table名称为要新建的名称然后执行

CREATE TABLE `new_docs` (
	`id` INT ( 6 ) UNSIGNED NOT NULL,
	`rev` INT ( 3 ) UNSIGNED NOT NULL,
	`content` VARCHAR ( 200 ) NOT NULL,
PRIMARY KEY ( `id`, `rev` ) 
) ENGINE = INNODB DEFAULT CHARSET = utf8

第三步,复制原有表的数据到新表中

然后使用如下命令将源表中的数据复制到新表中

INSERT INTO `new_docs` (id, rev, content) SELECT `id`, `rev`, `content` FROM docs;

发表评论

电子邮件地址不会被公开。 必填项已用*标注