Nehmen wir an, Ihre Tabelle hat folgende Felder:
( pk_id int not null auto_increment primary key,
col1 int,
col2 varchar(10)
)
Um dann Werte von einer Zeile in die andere Zeile mit neuem Schlüsselwert zu kopieren, kann die folgende Abfrage hilfreich sein
insert into my_table( col1, col2 ) select col1, col2 from my_table where pk_id=?;
Dadurch wird ein neuer Wert für pk_id
generiert Feld und kopieren Sie die Werte aus col1
, und col2
der ausgewählten Zeile.
Sie können dieses Beispiel erweitern, um weitere Felder in der Tabelle anzuwenden.
AKTUALISIEREN :
Mit gebührendem Respekt vor den Kommentaren von JohnP und Martin -
Wir können die temporäre Tabelle verwenden, um zuerst von der Haupttabelle zu puffern und sie zum erneuten Kopieren in die Haupttabelle zu verwenden. Eine bloße Aktualisierung des pk-Referenzfelds in der temporären Tabelle hilft nicht, da es möglicherweise bereits in der Haupttabelle vorhanden ist. Stattdessen können wir das pk-Feld aus der temporären Tabelle löschen und alle anderen in die Haupttabelle kopieren.
Mit Bezug auf die Antwort von Tim Ruehsen im verwiesenes Posting :
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;
Hoffe das hilft.