mysql 在存储过程中创建触发器

mysql create trigger inside stored procedure

如何通过在 mysql 中执行存储过程来创建触发器。如果不可能,请说明原因。 有什么方法可以动态创建触发器而不用每次都创建吗?

If it is not possible please explain the reasons.


MySQL 8.0 Reference Manual / Stored Objects / Restrictions on Stored Programs # SQL Statements Not Permitted in Stored Routines

Generally, statements not permitted in SQL prepared statements are also not permitted in stored programs. For a list of statements supported as prepared statements, see Section 13.5, “Prepared Statements”. Exceptions are SIGNAL, RESIGNAL, and GET DIAGNOSTICS, which are not permissible as prepared statements but are permitted in stored programs.

MySQL 8.0 Reference Manual / SQL Statements / Prepared Statements # SQL Syntax Permitted in Prepared Statements

已提供允许的语句的完整列表。此列表中没有 CREATE TRIGGER 语句。

因此,无法在存储过程中创建触发器。


但您可以创建触发器并影响其执行。例如,您可以在数据库中创建一些服务 table,并在触发器代码中检查存储在其中的值 - 使用它们作为参数或 execute/skip 各种代码块。

这也符合“客户端代码不应执行 DDL 操作”的原则。