给出以下表结构:
ID
Field1
Field2
Field3
我想在表格中复制一条记录。伪代码看起来像这样:
DUPLICATE * IN MyTable WHERE ID = 3
以下是我的约束:
我不希望在PHP中执行此操作。
答案 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示例。