sql >> Databasteknik >  >> RDS >> Mysql

Kopiera rad men med nytt id

Låt oss säga att din tabell har följande fält:

( pk_id int not null auto_increment primary key,
  col1 int,
  col2 varchar(10)
)

sedan, för att kopiera värden från en rad till den andra raden med nytt nyckelvärde, kan följande fråga hjälpa

insert into my_table( col1, col2 ) select col1, col2 from my_table where pk_id=?;

Detta kommer att generera ett nytt värde för pk_id fält och kopiera värden från col1 och col2 för den valda raden.

Du kan utöka detta urval för att ansöka om fler fält i tabellen.

UPPDATERA :
Med respekt för kommentarerna från JohnP och Martin -

Vi kan använda temporär tabell för att buffra först från huvudtabellen och använda den för att kopiera till huvudtabellen igen. Enbart uppdatering av pk-referensfältet i temptabellen hjälper inte eftersom det kanske redan finns i huvudtabellen. Istället kan vi släppa pk-fältet från temptabellen och kopiera allt annat till huvudtabellen.

Med hänvisning till svaret av Tim Ruehsen i det hänvisade inlägget :

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;

Hoppas detta hjälper.



  1. Logisk OCH operator i mySql REGEXP?

  2. Hur använder man en PostgreSQL-behållare med befintliga data?

  3. Uppdatera summan baserat på föregående saldorad

  4. SQL Server ALL Operatör förklaras