Das Einfügen von Daten in MySQL-Tabellen ist normalerweise unkompliziert. In bestimmten Szenarien möchten Sie jedoch möglicherweise bedingte Einfügungen basierend auf bestimmten Kriterien durchführen. Während gespeicherte Prozeduren solche Aufgaben erledigen können, kann es praktisch sein, dies direkt in Ihren Abfragen zu tun.
Beim Umgang mit der Ressourcenzuweisung stellt sich häufig eine Frage. Stellen Sie sich ein Szenario vor, in dem Sie zwei Tabellen haben: Produkte und Bestellungen. Bestellungen verfolgen Produkte und deren Mengen, während Produkte die verfügbare Menge beibehalten. Wenn eine Bestellung aufgegeben wird, möchten Sie nur dann eine neue Bestellzeile einfügen, wenn ausreichend Lagerbestand vorhanden ist.
Traditionell würden Sie die verfügbare Menge mithilfe einer SELECT-Anweisung überprüfen und dann die Bestellung einfügen, wenn die Bedingung erfüllt ist. Dieser Ansatz weist jedoch Probleme mit der Parallelität auf. Bei mehreren gleichzeitigen Bestellungen kann die gleiche verfügbare Menge angezeigt werden, bevor sie verarbeitet wurden, was möglicherweise zu Überverkäufen führt.
Um dies zu beheben, können Sie eine bedingte INSERT-Anweisung verwenden:
INSERT INTO TABLE SELECT value_for_column1, value_for_column2, ... FROM wherever WHERE your_special_condition
In dieser Anweisung , wird INSERT nur ausgeführt, wenn die WHERE-Klausel „true“ ergibt. Mithilfe des Beispielschemas können Sie ein bedingtes INSERT wie folgt schreiben:
INSERT INTO orders (product_id, qty) SELECT 2, 20 WHERE (SELECT qty_on_hand FROM products WHERE id = 2) > 20;
Diese Anweisung fügt nur dann eine Bestellzeile ein, wenn die verfügbare Menge für Produkt 2 größer als 20 ist. Andernfalls werden keine Zeilen eingefügt , um Überverkauf zu verhindern.
Dieser Ansatz kombiniert die Funktionalität einer SELECT-Anweisung mit der INSERT-Anweisung und erstellt so effektiv eine bedingte Einfügung, die die Datenintegrität auch bei gleichzeitiger Verwendung aufrechterhält Szenarien.
Das obige ist der detaillierte Inhalt vonWie können Sie bedingte Einfügungen in MySQL für eine sichere Ressourcenzuweisung implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!