insert into table select * from table where primarykey=1
我只想复制一行以插入到同一个表中(即,我想复制表中的现有行),但我想这样做而不必列出“select”之后的所有列,因为该表有太多的列。
但是当我这样做时,我收到错误:
键 1 的重复条目“xxx”
我可以通过创建另一个具有相同列的表作为我要复制的记录的临时容器来处理此问题:
create table oldtable_temp like oldtable;
insert into oldtable_temp select * from oldtable where key=1;
update oldtable_tem set key=2;
insert into oldtable select * from oldtable where key=2;
有没有更简单的方法来解决这个问题?
我使用了 Leonard Challis 的技术,但做了一些改变:
CREATE TEMPORARY TABLE tmptable_1 SELECT * FROM table WHERE primarykey = 1;
UPDATE tmptable_1 SET primarykey = NULL;
INSERT INTO table SELECT * FROM tmptable_1;
DROP TEMPORARY TABLE IF EXISTS tmptable_1;
作为临时表,永远不应该有超过一条记录,因此您不必担心主键。将其设置为 null 允许 MySQL 自行选择值,因此不存在创建重复项的风险。
如果您想非常确定只插入一行,可以将 LIMIT 1 添加到 INSERT INTO 行的末尾。
请注意,我还将主键值(在本例中为 1)附加到临时表名称中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)