Duplication de lignes dans MySQL sans énumération de colonnes
Dans MySQL, les utilisateurs rencontrent le besoin de créer des copies de lignes existantes dans une table. Bien qu'il soit tentant d'utiliser une approche simple telle que :
insert into table select * from table where primarykey=1
cette méthode déclenche une erreur « Entrée en double pour la clé 1 » en raison du caractère unique des clés primaires. Pour contourner ce problème, une solution viable implique la création d'une table temporaire :
create table oldtable_temp like oldtable; insert into oldtable_temp select * from oldtable where key=1; update oldtable_tem set key=2; insert into oldtable select * from oldtable where key=2;
Cependant, une approche plus simple existe, comme suggéré par 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;
En utilisant une table temporaire, nous pouvons éviter les soucis de duplication de clé primaire. Définir la clé primaire sur null permet à MySQL d'attribuer automatiquement une valeur unique, éliminant ainsi le risque de créer un doublon.
Pour garantir la singularité lors de l'insertion, pensez à ajouter LIMIT 1 à l'instruction INSERT INTO.
De plus, il est recommandé d'incorporer la valeur de la clé primaire (par exemple, "tmptable_1" dans l'exemple) dans le nom de la table temporaire pour plus de clarté.
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!