最快的方法来复制MySQL中的表?

我想在MySQL中复制一个表。 什么是最快的方法? 喜欢这个?

CREATE TABLE copy LIKE original; INSERT INTO copy SELECT * FROM original; 

要么

 CREATE TABLE copy SELECT * FROM original; ALTER TABLE copy ADD PRIMARY KEY (id); 

还是有另一种方式?

编辑:我担心索引被重新创build,如何继续执行这些语句的MySQL?

PS。 不能使用像mysqldump这样的命令行工具,必须在运行中。

这立即复制表的结构,但不是数据:

 CREATE TABLE copy LIKE original; 

这创build了original表的所​​有索引。

它在MySQL 5.1.39这种方式工作。

使用MyISAM表的最快方式,同时保留索引 ),也许其他存储引擎是:

 CREATE TABLE copy LIKE original; ALTER TABLE copy DISABLE KEYS; INSERT INTO copy SELECT * FROM original; ALTER TABLE copy ENABLE KEYS; 

您希望禁用您的数据库加载密钥,然后重新创build密钥。

同样,对于InnoDB

 SET unique_checks=0; SET foreign_key_checks=0; ..insert sql code here.. SET unique_checks=1; SET foreign_key_checks=1; 

(正如在评论中指出的那样)

从手册 :

“CREATE TABLE … SELECT不会自动为你创build任何索引,这样做是为了使语句尽可能灵活,如果你想在创build的表中有索引,你应该在SELECT语句之前指定这些:”

 CREATE TABLE bar (UNIQUE (n)) SELECT n FROM foo; 

您可以使用CREATE TABLE LIKECREATE TABLE SELECT来指定索引和数据types(以避免数据types转换)。 哪一个更快将取决于您的设置。

create table mynewtable (select * from myoldtable)在MySQL中工作? 如果是的话,你也可以试试。

要使用索引和触发器进行复制,请执行以下2个查询:

 CREATE TABLE newtable LIKE oldtable; INSERT newtable SELECT * FROM oldtable; 

复制只是结构和数据使用这一个:

 CREATE TABLE tbl_new AS SELECT * FROM tbl_old; 

最好的方法来复制结构和所有条目从一个表到另一个表(通过创build新表)是这个查询…

CREATE TABLE new_table LIKE old_table; INSERT new_table SELECT * FROM old_table;

尝试SELECT INTO ,并使用variables作为SELECT INTO

首先,您必须创build接收表,使其具有与源表相同的结构。

最好的是,它是内部的,所以它的速度很快。 不过,你会失去你的索引。

如果您正在使用MyISAM,则还可以复制和重命名文件。 .MYD,.MYI,.FRM文件在后端

也许你可以看看SHOW CREATE TABLE

采取的步骤:

  • 去phpmyadmin

  • 转到SQL

执行这个查询

 SHOW CREATE TABLE `the_old_table`; 
  • 点击选项选中“全文”,然后按“执行”。

结果是一个完整的CREATE TABLE语句。 编辑查询,直到你快乐。

资源: http : //dev.mysql.com/doc/refman/5.7/en/show-create-table.html

 CREATE TABLE copy SELECT * FROM original; 

是一个快速的方法,但可能不是索引的最快原因。