Mysql
 sql >> Database >  >> RDS >> Mysql

Copia riga ma con nuovo ID

Supponiamo che la tua tabella abbia i seguenti campi:

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

quindi, per copiare i valori da una riga all'altra con un nuovo valore chiave, la seguente query potrebbe essere d'aiuto

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

Questo genererà un nuovo valore per pk_id campo e copia i valori da col1 e col2 della riga selezionata.

Puoi estendere questo esempio per richiedere più campi nella tabella.

AGGIORNAMENTO :
Con il dovuto rispetto per i commenti di JohnP e Martin -

Possiamo usare la tabella temporanea per fare il buffer prima dalla tabella principale e usarla per copiare di nuovo nella tabella principale. Il semplice aggiornamento del campo di riferimento pk nella tabella temporanea non aiuterà in quanto potrebbe essere già presente nella tabella principale. Invece possiamo eliminare il campo pk dalla tabella temporanea e copiare tutti gli altri nella tabella principale.

Con riferimento alla risposta di Tim Ruehsen nel pubblicazione referenziata :

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;

Spero che questo aiuti.