Mysqli 简明教程

MySQLi - Clone Tables

可能存在需要一张表的精确副本的情况,而对于 CREATE TABLE …​ SELECT 来说,因为副本必须包含相同的索引、默认值等,它并不适合你的目的。

你可以执行以下步骤来处理此类情况−

  1. 使用“SHOW CREATE TABLE”获取“CREATE TABLE”语句,该语句指定源表结构、索引等。

  2. 修改语句以将表名更改为克隆表的表名,然后执行该语句。通过这种方式,你将获得精确的克隆表。

  3. 另外,如果还需要复制表内容,请再发布“INSERT INTO…​ SELECT”语句。

Example

尝试以下示例为 tutorials_inf 创建一个克隆表。

Step 1

获取表的完整结构。

mysql> SHOW CREATE TABLE tutorials_inf \G;
*************************** 1. row ***************************
       Table: tutorials_inf
Create Table: CREATE TABLE `tutorials_inf` (
   `id` int(11) NOT NULL,
   `name` varchar(20) NOT NULL,
   PRIMARY KEY (`id`),
   UNIQUE KEY `AUTHOR_INDEX` (`name`),
   UNIQUE KEY `NAME_INDEX` (`name`),
   KEY `id` (`id`)
) ENGINE = InnoDB DEFAULT CHARSET = latin1
1 row in set (0.05 sec)

ERROR: No query specified

Step 2

重命名此表并创建另一张表。

mysql> CREATE TABLE tutorials_clone(
   → id int(11) NOT NULL,
   → name varchar(20) NOT NULL,
   → PRIMARY KEY (id),
   → UNIQUE KEY AUTHOR_INDEX (name),
   → UNIQUE KEY NAME_INDEX (name),
   →  KEY id (id));
Query OK, 0 rows affected (1.80 sec)

Step 3

在执行步骤 2 后,你将在自己的数据库中创建一张克隆表。如果你想从旧表中复制数据,可以使用 INSERT INTO…​ SELECT 语句来执行此操作。

mysql> INSERT INTO tutorials_clone(id,name) SELECT id,name from tutorials_inf;
Query OK, 4 rows affected (0.19 sec)
Records: 4  Duplicates: 0  Warnings: 0

最后,你将获得自己想要的一个精确克隆表。