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.