Laten we zeggen dat uw tabel de volgende velden heeft:
( pk_id int not null auto_increment primary key,
col1 int,
col2 varchar(10)
)
om vervolgens waarden van de ene rij naar de andere rij te kopiëren met een nieuwe sleutelwaarde, kan de volgende vraag helpen
insert into my_table( col1, col2 ) select col1, col2 from my_table where pk_id=?;
Dit genereert een nieuwe waarde voor pk_id
veld en kopieer waarden van col1
, en col2
van de geselecteerde rij.
U kunt dit voorbeeld uitbreiden om meer velden in de tabel aan te vragen.
UPDATE :
Met respect voor de opmerkingen van JohnP en Martin -
We kunnen een tijdelijke tabel gebruiken om eerst van de hoofdtabel te bufferen en deze gebruiken om opnieuw naar de hoofdtabel te kopiëren. Een update van het pk-referentieveld in de tijdelijke tabel zal niet helpen, omdat het mogelijk al aanwezig is in de hoofdtabel. In plaats daarvan kunnen we het pk-veld uit de tijdelijke tabel laten vallen en alle andere naar de hoofdtabel kopiëren.
Met verwijzing naar het antwoord van Tim Ruehsen in de verwezen bericht :
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;
Ik hoop dat dit helpt.