MySQL INSERT IF (benutzerdefinierte if-Anweisungen)

Erste, hier ist die kurze Zusammenfassung der Frage:

Ist es möglich, eine INSERT Anweisung bedingt?
So etwas wie dieses:

IF(expression) INSERT...

Nun, ich weiß, ich kann dies tun mit einer gespeicherten Prozedur.
Meine Frage ist: kann ich dies in meine Abfrage?


Nun, warum sollte ich das tun wollen?

Nehmen wir an, wir haben folgende 2 Tabellen:

products: id, qty_on_hand
orders: id, product_id, qty

Nun, sagen wir, einen Auftrag für 20 Voodoo-Puppen (Produkt-id 2).
Zuerst prüfen wir, ob es reicht, Menge Auf der Hand:

SELECT IF(
    ( SELECT SUM(qty) FROM orders WHERE product_id = 2  ) + 20
    <=
    ( SELECT qty_on_hand FROM products WHERE id = 2)
, 'true', 'false');

Dann, wenn es zu true ausgewertet wird, führen wir eine INSERT Abfrage.
So weit So gut.


Allerdings gibt es ein problem mit der Gleichzeitigkeit.
Wenn 2 Bestellungen kommen in der genau die gleiche Zeit, könnten Sie sowohl Lesen als die Menge-auf-hand, bevor einer von Ihnen hat den Auftrag eingegeben hat.
Sie werden dann sowohl die Bestellung aufgeben, damit die überschreitung der qty_on_hand.


So, zurück an die Wurzel der Frage:
Ist es möglich, eine INSERT Anweisung bedingt, so dass wir kombinieren diese beiden Abfragen in einer?

Ich suchte viel herum, und die einzige Art der bedingten INSERT Aussage, die ich finden konnte, war ON DUPLICATE KEYdie offensichtlich gilt hier nicht.

InformationsquelleAutor der Frage Joseph Silber | 2011-07-28

Schreibe einen Kommentar