我们说你的表有以下字段:
( pk_id int not null auto_increment primary key,
col1 int,
col2 varchar(10)
)
然后,使用新的键值将值从一行复制到另一行,
以下查询可能有帮助
insert into my_table( col1, col2 ) select col1, col2 from my_table where pk_id=?;
这将为pk_id字段生成新值,并从col1和所选行的col2复制值.
您可以扩展此示例以应用表中的更多字段.
更新:
在适当尊重JohnP和Martin的评论时 –
我们可以使用临时表首先从主表缓冲,然后再用它复制到主表.
仅更新临时表中的pk参考字段将无济于事,因为它可能已存在于主表中.相反,我们可以从临时表中删除pk字段并将所有其他字段复制到主表.
CREATE TEMPORARY TABLE tmp SELECT * from my_table WHERE ...;
ALTER TABLE tmp drop pk_id; # drop autoincrement field
# UPDATE tmp SET ...; # just needed to change other unique keys
INSERT INTO my_table SELECT 0,tmp.* FROM tmp;
DROP TEMPORARY TABLE tmp;
希望这可以帮助.