PHP MySQL 在同一个表中复制一行...具有主键和唯一键

2022-08-30 17:18:51

我的表有两个键,一个是自动递增的 id(PRIMARY),另一个是项目的名称(UNIQUE)。

是否可以在同一表中复制一行?我试过:

INSERT INTO items
SELECT * FROM items WHERE id = '9198'

这给出了错误Duplicate entry '9198' for key 'PRIMARY'

我也试过:

INSERT INTO items
SELECT * FROM items WHERE id = '9198'
ON DUPLICATE KEY UPDATE id=id+1

这给出了错误Column 'id' in field list is ambiguous

就项目名称(UNIQUE)字段而言,有没有办法附加到项目名称,因为此字段也必须是唯一的?(Copy)


答案 1

显式选择除 id 列之外的所有列:

INSERT INTO items
(col1, col2, ..., coln)
SELECT col1, col2, ..., coln
FROM items
WHERE id = '9198'

您的下一个问题可能是:

有没有办法在不显式列出所有列的情况下执行此操作?

答:不,我不这么认为。


答案 2

如果你真的不想像 Mark 的答案那样列出所有的表格列,你可以试试这个:

CREATE TEMPORARY TABLE temp_tbl SELECT * FROM items WHERE id = '9198';
SELECT @maxId := MAX(id) + 1 FROM items;
UPDATE temp_tbl SET id = @maxId;
INSERT INTO items SELECT * FROM temp_tbl;
DROP TABLE temp_tbl;

不漂亮,不快。但有效。


推荐