Bedingte INSERT-Anweisungen in MySQL
Frage: Ist es möglich, eine INSERT-Operation bedingt auszuführen, ähnlich einer IF-Anweisung?
Ausarbeitung:
Angenommen, wir müssen eine Bestellung für 20 Artikel mit der Produkt-ID 2 aufgeben. Um einen ausreichenden Lagerbestand sicherzustellen, überprüfen wir zunächst die verfügbare Menge :
SELECT IF( ( SELECT SUM(qty) FROM orders WHERE product_id = 2 ) 20Wenn das Ergebnis wahr ist, führen wir die INSERT-Abfrage aus. Dieser Ansatz ist jedoch anfällig für Parallelitätsprobleme. Mehrere gleichzeitige Bestellungen können zu Überverkäufen führen.
Antwort:
Ja, bedingte INSERT-Anweisungen sind mit der folgenden Syntax möglich:
INSERT INTO TABLE SELECT value_for_column1, value_for_column2, ... FROM wherever WHERE your_special_conditionWenn die SELECT-Anweisung keine Zeilen zurückgibt (d. h. die Sonderbedingung ist falsch), erfolgt keine Einfügung.
Beispiel:
Für das angegebene Schema:
products: id, qty_on_hand orders: id, product_id, qtyinsert into orders (product_id, qty) select 2, 20 where (SELECT qty_on_hand FROM products WHERE id = 2) > 20;Diese Abfrage fügt nur dann eine Zeile ein, wenn ausreichend Lagerbestand vorhanden ist. Andernfalls wird die Einfügung nicht ausgeführt.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3