mysql在存储过程中创建触发器
Posted
技术标签:
【中文标题】mysql在存储过程中创建触发器【英文标题】:mysql create trigger inside stored procedure 【发布时间】:2021-10-12 20:14:50 【问题描述】:如何通过在 mysql 中执行存储过程来创建触发器。如果不可能,请说明原因。 有没有什么方法可以动态创建触发器而不是每次都创建?
【问题讨论】:
您是否尝试在Events
中创建它?就像在Event
中执行Trigger
而不是Stored Procedure
,因为在Events
中,您可以安排您希望它执行的时间。
也许你可以用这个来解释你试图解决的问题。几乎可以肯定还有另一种可能更好的方法
我的数据库中有 50 个表。我需要创建一个存储过程,通过调用存储过程为每个表创建一个审计表。并且还需要在创建审计表时创建触发器。我尝试在 sp 中添加触发器创建部分,但它给出了一个错误。。
【参考方案1】:
如果不能,请说明原因。
MySQL 8.0 Reference Manual / Stored Objects / Restrictions on Stored Programs # SQL Statements Not Permitted in Stored Routines
通常,SQL 准备语句中不允许的语句也不允许在存储程序中。有关支持作为准备语句的语句列表,请参阅第 13.5 节,“准备语句”。 SIGNAL、RESIGNAL 和 GET DIAGNOSTICS 除外,它们不允许作为预准备语句,但允许在存储程序中使用。
MySQL 8.0 Reference Manual / SQL Statements / Prepared Statements # SQL Syntax Permitted in Prepared Statements
提供了允许的语句的完整列表。此列表中没有 CREATE TRIGGER 语句。
因此,无法在存储过程中创建触发器。
但您可以创建触发器并影响其执行。例如,您可以在数据库中创建一些服务表,并在触发器代码中检查存储在其中的值 - 将它们用作参数或执行/跳过各种代码块。
这也符合“客户端代码不应执行 DDL 操作”的原则。
【讨论】:
以上是关于mysql在存储过程中创建触发器的主要内容,如果未能解决你的问题,请参考以下文章