„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Können MySQL-INSERT-Anweisungen an Bedingungen geknüpft werden?

Können MySQL-INSERT-Anweisungen an Bedingungen geknüpft werden?

Veröffentlicht am 11.11.2024
Durchsuche:612

Can MySQL INSERT Statements Be Made Conditional?

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  )   20
    

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

Wenn 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, 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.

Neuestes Tutorial Mehr>

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