MySQL INSERT SI (personnalisé si les déclarations)

Tout d'abord, voici le résumé succinct de la question:

Est-il possible de faire fonctionner un INSERT instruction conditionnelle?
Quelque chose de semblable à ceci:

IF(expression) INSERT...

Maintenant, je sais que je peux le faire avec une procédure stockée.
Ma question est: puis-je faire dans ma requête?


Maintenant, pourquoi voudrais-je faire?

Supposons que nous avons les 2 tableaux:

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

Maintenant, disons une commande de 20 Poupées Vaudou (id de produit 2) vient en.

Nous vérifions d'abord si il y a assez de Quantité en Main:

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

Puis, si elle est true, nous organisons un INSERT requête.

So far So good.


Cependant, il y a un problème avec la concurrence d'accès.

Si 2 commandes viennent à la même temps exact, ils pourraient à la fois de lire la quantité-sur-le-main avant de l'un d'entre eux est entré dans l'ordre.
Ils vont alors à la fois le lieu de la commande, dépassant ainsi le qty_on_hand.


Donc, revenons à la racine de la question:

Est-il possible de faire fonctionner un INSERT déclaration sous certaines conditions, de sorte que nous pouvons combiner ces deux requêtes en une?

J'ai cherché autour d'un lot, et le seul type de liberté sous condition INSERT déclaration que j'ai pu trouver était ON DUPLICATE KEY, qui, évidemment, ne s'applique pas ici.