Bedingte INSERT-Anweisungen in MySQL
Frage: Ist es möglich, eine INSERT-Operation bedingt auszuführen, ähnlich einer IF-Erklärung?
Ausarbeitung:
Angenommen, wir müssen eine Bestellung für 20 Artikel mit der Produkt-ID 2 aufgeben. Um einen ausreichenden Lagerbestand sicherzustellen, prüfen wir zunächst die verfügbare Menge :
SELECT IF( ( SELECT SUM(qty) FROM orders WHERE product_id = 2 ) + 20 <= ( SELECT qty_on_hand FROM products WHERE id = 2) , 'true', 'false');
Wenn 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_condition
If Die SELECT-Anweisung gibt keine Zeilen zurück (d. h. die Sonderbedingung ist falsch), es erfolgt keine Einfügung.
Beispiel:
Für das angegebene Schema:
products: id, qty_on_hand orders: id, product_id, qty
insert 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.
Das obige ist der detaillierte Inhalt vonKönnen MySQL-INSERT-Anweisungen an Bedingungen geknüpft werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!