Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Ist es im MySQL-Trigger möglich, eine Benutzervariable mit NEW.col festzulegen und diese in der Aktualisierungsabfrage zu verwenden?

Dies ist nicht wie beschrieben mit dynamischem SQL / Prepared Statement möglich. Es würde Error Code: 1336. Dynamic SQL is not allowed in stored function or trigger beim Versuch, sogar CREATE TRIGGER .

Der Automatisierung am nächsten kommt man mit CREATE EVENT . Ereignisse sind geplante gespeicherte Programme, die nach dem Zeitplan / Intervall Ihrer Wahl ausgeführt werden. Die Intervalle sind:

Sie könnten sozusagen ein "Flag" auf eine Zeile setzen, wie z. B. die Tabelle, die Sie oben darstellen und die den After Insert-Trigger hat. Das Ereignis könnte dann die Prepared Statement dynamisch ändern und ausführen.

Siehe meine Antwort hier auf Event Management .

Ich muss sagen, dass Sie fast Immer vorschlagen, selbst wenn Sie in einem Event laufen das Zeichen für ein schlechtes Schemadesign, das einer Peer-Review nicht standhalten würde.

Ein Grund, warum das dynamische SQL und ein vorbereitetes Stmt nicht zulässig sind, liegt darin, dass der Trigger schnell sein muss und sogar DDL in die Zeichenfolge eingeschmuggelt und ausgeführt werden könnte. Und DDL-Stmts wie ALTER TABLE sind in Triggern nicht erlaubt (es könnte Stunden dauern, bis sie buchstäblich ausgeführt werden).

Ihr Schema könnte genauso gut eine Tabelle haben, die mit einer Spalte ven_code geteilt wird die Unterscheidungsspalte ist. Stattdessen haben Sie sich entschieden, neue Tabellen für jeden ven_code zu erstellen . Das ist normalerweise eine schlechte Wahl für Design und Leistung.

Wenn Sie Hilfe beim Schemadesign benötigen, unterhalte ich mich gerne mit Ihnen in einem Chatroom darüber.