繁体   English   中英

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

[英]Duplicating a row in MySQL without recoding for database change

给定以下表结构:

ID
Field1
Field2
Field3

我想复制表中的一条记录。 伪代码如下所示:

DUPLICATE * IN MyTable WHERE ID = 3

这是我的约束:

  1. 我不希望ID重复。
  2. 我现在不在表中有多少个字段或其类型。

不想这样做在PHP。

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

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

这是一个SQL Fiddle示例。

编辑

如果您不知道有多少个字段,则可以选择使用临时表。 例如,请参阅本文 之所以需要一个临时表,是因为您不能简单地重新插入该行,因为将有重复的键错误。 因此逻辑如下:将行添加到新表中,更改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示例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM