Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Zeile kopieren, aber mit neuer ID

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.