在MySQL中复制一行而不重新编码数据库更改

时间:2015-01-16 20:06:43

标签: mysql sql

给出以下表结构:

ID
Field1
Field2
Field3

我想在表格中复制一条记录。伪代码看起来像这样:

DUPLICATE * IN MyTable WHERE ID = 3

以下是我的约束:

  1. 我不希望ID重复。
  2. 我现在不知道表中有多少个字段或类型。
  3. 希望在PHP中执行此操作。

1 个答案:

答案 0 :(得分:2)

您可以使用select语句插入行。如果要插入具有所有相同值的新行,只需编写一个select语句即可获得所需的值。尝试这样的事情:

INSERT INTO myTable (field1, field2, field3) 
   SELECT field1, field2, field3 FROM myTable WHERE id = 3;

以下是SQL Fiddle示例。

修改

如果您不知道有多少字段,您可以选择使用临时表。例如,请参阅此article。您需要临时表的原因是因为您不能简单地重新插入行,因为您将遇到重复的键错误。所以逻辑如下:向新表添加行,更改id,将带有新id的重复行插入旧表,然后删除临时表。

假设您的id列是auto_increment,您可以将新ID设置为当前最大ID + 1.您不必这样做,但只要您有一些方法可以将ID更新为尚不存在的东西,这将起作用。试试这个:

CREATE TEMPORARY TABLE temp SELECT * FROM myTable WHERE id = 3;
UPDATE temp SET id = (SELECT MAX(id) FROM myTable) + 1;
INSERT INTO myTable SELECT * FROM temp;
DROP TABLE temp;

这是另一个SQL Fiddle示例。