L'insertion de données dans des tables MySQL est généralement simple. Toutefois, dans certains scénarios, vous souhaiterez peut-être effectuer des insertions conditionnelles basées sur des critères spécifiques. Bien que les procédures stockées puissent gérer de telles tâches, il peut être pratique de le faire directement dans vos requêtes.
Une question courante se pose lorsqu'il s'agit d'allocation de ressources. Considérons un scénario dans lequel vous disposez de deux tables : les produits et les commandes. Les commandes suivent les produits et leurs quantités, tandis que les produits maintiennent la quantité disponible. Lorsqu'une commande est passée, vous souhaitez insérer une nouvelle ligne de commande uniquement s'il y a un stock suffisant.
Traditionnellement, vous vérifiez la quantité disponible à l'aide d'une instruction SELECT, puis insérez la commande si la condition est remplie. Cependant, cette approche présente des problèmes de concurrence. Plusieurs commandes simultanées peuvent indiquer la même quantité disponible avant qu'elles n'aient été traitées, ce qui pourrait entraîner une survente.
Pour résoudre ce problème, vous pouvez utiliser une instruction INSERT conditionnelle :
INSERT INTO TABLE SELECT value_for_column1, value_for_column2, ... FROM wherever WHERE your_special_condition
Dans cette instruction , l'INSERT n'est effectué que si la clause WHERE est évaluée à true. À l'aide de l'exemple de schéma, vous pouvez écrire un INSERT conditionnel comme suit :
INSERT INTO orders (product_id, qty) SELECT 2, 20 WHERE (SELECT qty_on_hand FROM products WHERE id = 2) > 20;
Cette instruction insérera une ligne de commande uniquement si la quantité disponible pour le produit 2 est supérieure à 20. Sinon, aucune ligne n'est insérée. , empêchant la survente.
Cette approche combine la fonctionnalité d'une instruction SELECT avec l'instruction INSERT, créant ainsi une insertion conditionnelle qui maintient l'intégrité des données même dans des environnements concurrents. scénarios.
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!