Ist es möglich zu überprüfen, ob ein bestimmtes Feld in eine INSERT-Anweisung im Zusammenhang mit einem Auslöser enthalten war, den diese INSERT-Anweisung ausgelöst hat?So ermitteln Sie, ob ein Tabellenfeld in einen Insert-Trigger eingeschlossen wurde
Sagen Sie zum Beispiel, es gibt eine customers
Tabelle mit den folgenden Feldern: customerid INT NOT NULL
und isCrazy BIT(1) DEFAULT b'1'
. Diese Tabelle hat einen Trigger vor dem Einfügen und es muss überprüft werden, ob die INSERT-Anweisung das Feld isCrazy
enthält.
INSERT INTO customers (customerid) VALUES (1);
ODER
INSERT INTO customers (customerid, isCrazy) VALUES (1, b'0');
Wenn das Feld definiert ist, dann sollte es gehen gespeichert werden, sonst gibt es bestimmte Maßnahmen ergriffen werden, um den richtigen Wert zu bestimmen, der in dieses Feld eingefügt werden soll; Das wäre nicht unbedingt der Standard.
Das Problem, das ich habe, ist, dass, wenn die isCrazy
Feld wurde nicht in der INSERT-Anweisung enthalten, dann NEW.isCrazy
hält den Standardwert (b'1 '); Das Gleiche, als ob der eingefügte Wert tatsächlich als solcher definiert wäre. Ist es möglich, die beiden Fälle auseinander zu halten?
'OPTION' ist ein [reserviertes Schlüsselwort] (https://dev.mysql.com/doc/refman/5.7/en/keywords.html). Wenn Sie können, wählen Sie einen anderen Spaltennamen oder Sie müssen entfliehen Sie es jedes Mal. – tadman
Ich weiß kein Ergebnis für Ihr Problem in einem Trigger. Sie können nur einen MaxScale-Proxy verwenden. das kann fast alles machen. Sie können die Anweisung darin analysieren und neu schreiben. siehe: https://mariadb.com/de/products/mariadb-maxscale –
@tadman Die Spalte heißt eigentlich nicht "option", ich werde die Frage für Klarheit bearbeiten. – Ozzyberto