Řekněme, že vaše tabulka má následující pole:
( pk_id int not null auto_increment primary key,
col1 int,
col2 varchar(10)
)
pak pro zkopírování hodnot z jednoho řádku do druhého s novou hodnotou klíče může pomoci následující dotaz
insert into my_table( col1, col2 ) select col1, col2 from my_table where pk_id=?;
Tím se vygeneruje nová hodnota pro pk_id
pole a zkopírujte hodnoty z col1
a col2
vybraného řádku.
Tento příklad můžete rozšířit a použít pro více polí v tabulce.
AKTUALIZACE :
S náležitým respektem ke komentářům od JohnaP a Martina -
Můžeme použít dočasnou tabulku k vyrovnávací paměti nejprve z hlavní tabulky a použít ji ke zkopírování do hlavní tabulky znovu. Pouhá aktualizace referenčního pole pk v dočasné tabulce nepomůže, protože může být již přítomno v hlavní tabulce. Místo toho můžeme vypustit pole pk z dočasné tabulky a zkopírovat všechny ostatní do hlavní tabulky.
S odkazem na odpověď od Tim Ruehsen v doporučeném příspěvku :
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;
Doufám, že to pomůže.