Maison >base de données >tutoriel mysql >Comment dupliquer des lignes dans MySQL sans erreur d'entrée en double ?

Comment dupliquer des lignes dans MySQL sans erreur d'entrée en double ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-14 21:50:02846parcourir

How to Duplicate Rows in MySQL Without a Duplicate Entry Error?

Duplication de lignes dans MySQL : une solution alternative

Lors de la tentative de duplication d'une ligne dans la même table MySQL à l'aide de la requête :

insert into table select * from table where primarykey=1

vous pouvez rencontrer une erreur de saisie en double en raison de la contrainte de clé primaire existante. Bien qu'une table temporaire puisse être utilisée pour contourner ce problème, il existe une solution plus simple.

En utilisant la technique modifiée suivante inspirée de Leonard Challis :

CREATE TEMPORARY TABLE tmptable_1 SELECT * FROM table WHERE primarykey = 1;
UPDATE tmptable_1 SET primarykey = NULL;
INSERT INTO table SELECT * FROM tmptable_1;
DROP TEMPORARY TABLE IF EXISTS tmptable_1;

Explication :

  1. Une table temporaire (tmptable_1) est créée et remplie avec la ligne que vous souhaitez dupliquer.
  2. La colonne clé primaire de la table temporaire est définie sur NULL. Cela permet à MySQL d'attribuer automatiquement une valeur unique, évitant toute duplication de clé.
  3. La ligne de la table temporaire est insérée dans la table d'origine.
  4. La table temporaire est ensuite supprimée.

En définissant la clé primaire sur NULL, vous éliminez le risque de créer des entrées en double. De plus, l'ajout de LIMIT 1 à la fin de l'instruction INSERT INTO garantit qu'une seule ligne est insérée.

L'ajout de la valeur de la clé primaire au nom de la table temporaire est une mesure de précaution permettant d'éviter des conflits potentiels lorsque plusieurs lignes sont en cours d'insertion. dupliqué simultanément.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn