Maison >base de données >tutoriel mysql >Comment effectuer des insertions conditionnelles dans MySQL ?
Réaliser des insertions conditionnelles dans MySQL
Dans MySQL, les insertions conditionnelles peuvent être difficiles en raison de l'absence de mots-clés spécifiques dédiés à cet effet. Par conséquent, des approches alternatives doivent être utilisées.
Approche utilisant une sous-requête :
Une solution efficace consiste à utiliser une sous-requête pour vérifier les lignes existantes avec des critères correspondants. La requête suivante insérera une nouvelle ligne dans x_table uniquement s'il n'existe pas de ligne avec les mêmes valeurs d'utilisateur et d'élément :
INSERT INTO x_table(instance, user, item) SELECT 919191, 123, 456 FROM dual WHERE NOT EXISTS (SELECT * FROM x_table WHERE user = 123 AND item = 456);
La sous-requête garantit que l'instruction INSERT s'exécute uniquement si la condition est remplie. dual est un tableau à une seule ligne qui fournit une source pratique pour l'instruction SELECT.
Approche alternative avec MERGE :
Une autre option pour les insertions conditionnelles consiste à utiliser MERGE déclaration. L'instruction MERGE permet à la fois l'insertion et les mises à jour en une seule opération. La requête suivante insérera une nouvelle ligne dans x_table si elle n'existe pas déjà, sinon elle mettra à jour la ligne existante :
MERGE INTO x_table AS target USING ( SELECT 919191 AS instance, 123 AS user, 456 AS item ) AS source ON target.user = source.user AND target.item = source.item WHEN NOT MATCHED THEN INSERT (instance, user, item) VALUES (source.instance, source.user, source.item) WHEN MATCHED THEN UPDATE SET instance = source.instance;
Dans cette approche, l'instruction MERGE vérifie d'abord une ligne existante avec une correspondance valeurs de l'utilisateur et de l'élément. Si aucune correspondance n'est trouvée, une nouvelle ligne est insérée en utilisant les données de la sous-requête source. Si une correspondance est trouvée, la valeur de l'instance est mise à jour.
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!