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在存储过程中创建触发器的主要内容,如果未能解决你的问题,请参考以下文章

如何在mysql中创建存储过程

如何从 python 在 mysql 中创建存储过程?

在 MySql/phpmyadmin 中创建存储过程

我可以在 MS Access 2010 中创建存储过程吗?

试图在 Mysql 中创建存储过程的语法错误?

使用 C# 在 MySQL 中创建存储过程