复制MySQL表,索引和数据

xkc*_*150 631 mysql

如何将MySQL表的数据,结构和索引复制或克隆或复制到新表?

这是我到目前为止所发现的.

这将复制数据和结构,但不复制索引:

create table {new_table} select * from {old_table};
Run Code Online (Sandbox Code Playgroud)

这将复制结构和索引,但不复制数据:

create table {new_table} like {old_table};
Run Code Online (Sandbox Code Playgroud)

Hai*_*vgi 1414

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

CREATE TABLE newtable LIKE oldtable; 
INSERT INTO newtable SELECT * FROM oldtable;
Run Code Online (Sandbox Code Playgroud)

要复制结构和数据,请使用以下方法:

CREATE TABLE tbl_new AS SELECT * FROM tbl_old;
Run Code Online (Sandbox Code Playgroud)

我之前问过这个:

复制包含索引的MySQL表

  • 注意:这不会复制`AUTO_INCREMENT`值. (11认同)
  • 值得注意的是,指向oldtable的外键需要复制到newtable(如果你要替换oldtable) (8认同)
  • 值得注意的是,虽然这会从正在复制的表中重新创建索引,但它确实_not_不承载任何外键约束. (6认同)
  • 这适用于大表(数百万条记录)吗?我问,因为我不知道这个`select*`将如何在巨大的表中执行. (3认同)
  • 大致来说,在AWS db.r3.large实例上的16M行(含5个索引)表上的插入操作花费了27分钟 (3认同)
  • 这项技术对我不起作用。它产生了一个错误:“#1062 - 键“ID”的重复条目“1””,即使只有一行包含 ID 值 1。我必须在第一步之后进行干预,并在允许插入行之前删除该列上的 AUTO_INCRMENT UNIQUE 索引。 (2认同)
  • 我怀疑如果您也希望复制AUTO_INCREMENT而不遇到我遇到的问题,则在创建后需要包括以下两个语句:SELECT @ai:= \ AUTO_INCREMENT \ FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA ='yourdbname' AND TABLE_NAME ='oldtable'; 修改表newtable AUTO_INCREMENT = @ ai; `。我无法验证此技术,因为我的帐户没有更新auto_increment的权限。 (2认同)

the*_*tar 41

除了上面的解决方案,您可以使用AS它在一行中.

CREATE TABLE tbl_new AS SELECT * FROM tbl_old;
Run Code Online (Sandbox Code Playgroud)

  • 这不会复制索引和触发器,因为SELECT结果是(未命名的)临时表,并且不"携带"源表的元数据.考虑一下你是否正在使用函数,这没有任何意义. (30认同)
  • 这正是他在问题中已经提到的内容:**`创建表{new_table} select * from {old_table}; ****不是答案,也没有提供新信息。 (3认同)
  • 我正在寻找备份结构表并仅移动数据,从而删除索引/约束/等。所以我可以重新创建它们。这个答案很棒,因为谷歌把我送到了这里。 (2认同)

Kri*_*eil 10

MySQL方式

CREATE TABLE recipes_new LIKE production.recipes;
INSERT recipes_new SELECT * FROM production.recipes;
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案。因为这会复制所有索引,包括主键和 auto_increment (2认同)

小智 8

转到phpMyAdmin并选择原始表,然后在" 复制表到(database.table) "区域中选择" 操作 "选项卡,选择要复制的数据库并为新表添加名称.

复制表 -  phyMyAdmin截图