Mysql
 sql >> Base de données >  >> RDS >> Mysql

Dans le déclencheur MySQL, est-il possible de définir une variable utilisateur avec NEW.col et de l'utiliser dans la requête de mise à jour ?

Ce n'est pas possible comme décrit avec sql dynamique / déclaration préparée. Cela générerait Error Code: 1336. Dynamic SQL is not allowed in stored function or trigger lors de la tentative même de CREATE TRIGGER .

Le plus proche de l'automatisation est d'utiliser CREATE EVENT . Les événements sont des programmes enregistrés planifiés qui s'exécutent selon le calendrier/l'intervalle de votre choix. Les intervalles sont :

Vous pouvez définir un "drapeau" pour ainsi dire sur une ligne, comme le tableau que vous décrivez ci-dessus qui a le déclencheur Après insertion. L'événement pourrait alors exécuter la Déclaration préparée dynamiquement et exécutez-le.

Voir ma réponse ici sur Gestion des événements .

Je dois dire que même s'il s'agit d'un événement, ce que vous proposez est presque Toujours le signe d'une conception de schéma médiocre qui ne résisterait pas bien à l'examen par les pairs.

Une raison pour laquelle le sql dynamique et un Stmt préparé ne sont pas autorisés est que le déclencheur doit être rapide, et même DDL pourrait être glissé dans la chaîne et exécuté. Et DDL stmts comme ALTER TABLE sont interdits dans les déclencheurs (ils peuvent prendre des heures à s'exécuter littéralement).

Votre schéma pourrait tout aussi bien avoir une table partagée avec une colonne ven_code étant la colonne de différenciation. Au lieu de cela, vous avez choisi de créer de nouvelles tables pour chaque ven_code . Il s'agit généralement d'un mauvais choix de conception et de performances.

Si vous avez besoin d'aide pour la conception de schémas, je me ferai un plaisir d'en discuter avec vous dans un salon de discussion.