【问题标题】:Stored Procedures vs Triggers in MySQLMySQL 中的存储过程与触发器
【发布时间】:2010-11-13 07:19:53
【问题描述】:

存储过程与 MySQL 世界中的触发器有何不同?

【问题讨论】:

    标签: mysql sql stored-procedures triggers


    【解决方案1】:

    存储过程存储为预编译代码(存储例程),并由程序员在任何需要触发的地方调用。存储过程可以返回值。 About procedures and functions.

    触发器是在插入、删除、更新(或其他事件)发生时自动触发的命名数据库对象,不能显式调用。触发器不能返回任何数据。 About triggers.

    您可以在触发器的代码中使用过程。

    【讨论】:

    • 我相信我不能在刚刚运行 INSERT 的同一张表上运行触发器?我对吗 ?另外,我可以根据事件自动运行程序吗?
    • 你不能调用触发器,它总是在之前或之后自动执行(在触发器中定义),但是你可以有很多触发器在同一个事件上执行(插入也是事件)。每个触发器在系统事件或插入/更新/删除事件上运行(您需要为此类触发器定义表)。您不能制作自动运行的程序,但您可以让触发器自动运行并调用您的程序。
    • 嗯,很多事情现在已经清除了,我已经彻底阅读了你的链接。但是您在括号中所说的话是什么意思-“每个触发器都在系统事件或插入/更新/删除事件上运行(您需要为这种触发器定义表)。”我是否需要定义触发器影响的单独表?
    • 我的错,MySQL 没有 system 事件。您需要定义事件触发器将影响的表,而可以执行触发器的所有事件都属于表:插入定义的表,更新定义的表等。不可能创建将在 any 表更新。您可以创建将在删除表后执行的触发器。您可以为每个表更新事件创建触发器。
    【解决方案2】:

    触发器是一种存储过程,但它基于表上的事件运行,而不仅仅是一组要重复执行的指令。

    触发器被定义为在对关联表执行 INSERT、DELETE 或 UPDATE 语句时激活。

    存储过程是一组编译成单个执行计划的 Transact-SQL 语句。

    【讨论】:

    • 我相信我不能在刚刚运行 INSERT 的同一张表上运行触发器?我对吗 ?另外,我可以根据事件自动运行程序吗?
    猜你喜欢
    • 2013-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多