Maison >base de données >tutoriel mysql >Comment effectuer des insertions conditionnelles dans MySQL ?

Comment effectuer des insertions conditionnelles dans MySQL ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-26 20:41:10458parcourir

How to Perform Conditional Inserts in 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!

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