Mysql
 sql >> Base de données >  >> RDS >> Mysql

Copier la ligne mais avec un nouvel identifiant

Supposons que votre table comporte les champs suivants :

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

ensuite, pour copier les valeurs d'une ligne à l'autre avec une nouvelle valeur de clé, la requête suivante peut aider

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

Cela générera une nouvelle valeur pour pk_id champ et copiez les valeurs de col1 , et col2 de la ligne sélectionnée.

Vous pouvez étendre cet exemple pour appliquer plus de champs dans la table.

MISE À JOUR :
Dans le respect des commentaires de JohnP et Martin -

Nous pouvons utiliser la table temporaire pour tamponner d'abord à partir de la table principale et l'utiliser pour copier à nouveau dans la table principale. Une simple mise à jour du champ de référence pk dans la table temporaire n'aidera pas car il pourrait déjà être présent dans la table principale. Au lieu de cela, nous pouvons supprimer le champ pk de la table temporaire et copier tous les autres dans la table principale.

En référence à la réponse de Tim Ruehsen dans la publication référée :

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;

J'espère que cela vous aidera.