【问题标题】:mysql create trigger inside stored proceduremysql在存储过程中创建触发器
【发布时间】:2021-10-12 20:14:50
【问题描述】:

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

【问题讨论】:

  • 您是否尝试在 Events 中创建它?就像在Event 中执行Trigger 而不是Stored Procedure,因为在Events 中,您可以安排您希望它执行的时间。
  • 也许你可以用这个来解释你试图解决的问题。几乎可以肯定还有另一种可能更好的方法
  • 我的数据库中有 50 个表。我需要创建一个存储过程,通过调用存储过程为每个表创建一个审计表。并且还需要在创建审计表时创建触发器。我尝试在 sp 中添加触发器创建部分,但它给出了一个错误。。

标签: mysql stored-procedures triggers mysql-workbench


【解决方案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 操作”的原则。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多