首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于插入和更新的MySQL触发触发器

问用于插入和更新的MySQL触发触发器
EN

Stack Overflow用户
提问于 2009-08-23 10:17:15
回答 3查看 114.4K关注 0票数 129

是否可以同时为表的插入和更新事件触发mysql触发器?

我知道我可以做到以下几点

代码语言:javascript
复制
CREATE TRIGGER my_trigger
    AFTER INSERT ON `table`
    FOR EACH ROW
BEGIN
.....
END //

CREATE TRIGGER my_trigger
    AFTER UPDATE ON `table`
    FOR EACH ROW
BEGIN
.....
END //

但是我该怎么做呢?

代码语言:javascript
复制
CREATE TRIGGER my_trigger
    AFTER INSERT ON `table` AND
    AFTER UPDATE ON `table`
    FOR EACH ROW
BEGIN
.....

有没有可能,或者我必须使用2个触发器?代码对于两者都是相同的,我不想重复它。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-08-23 10:20:56

您必须创建两个触发器,但您可以将公共代码移动到一个过程中,并让它们都调用该过程。

票数 145
EN

Stack Overflow用户

发布于 2014-08-31 02:38:03

为了响应@Zxaos的请求,因为我们不能对MySQL触发器使用AND/OR运算符,所以从您的代码开始,下面是一个实现相同操作的完整示例。

1.定义插入触发器:

代码语言:javascript
复制
DELIMITER //
DROP TRIGGER IF EXISTS my_insert_trigger//
CREATE DEFINER=root@localhost TRIGGER my_insert_trigger
    AFTER INSERT ON `table`
    FOR EACH ROW

BEGIN
    -- Call the common procedure ran if there is an INSERT or UPDATE on `table`
    -- NEW.id is an example parameter passed to the procedure but is not required
    -- if you do not need to pass anything to your procedure.
    CALL procedure_to_run_processes_due_to_changes_on_table(NEW.id);
END//
DELIMITER ;

2.定义更新触发器

代码语言:javascript
复制
DELIMITER //
DROP TRIGGER IF EXISTS my_update_trigger//

CREATE DEFINER=root@localhost TRIGGER my_update_trigger
    AFTER UPDATE ON `table`
    FOR EACH ROW
BEGIN
    -- Call the common procedure ran if there is an INSERT or UPDATE on `table`
    CALL procedure_to_run_processes_due_to_changes_on_table(NEW.id);
END//
DELIMITER ;

3.定义这两个触发器使用的公共过程:

代码语言:javascript
复制
DELIMITER //
DROP PROCEDURE IF EXISTS procedure_to_run_processes_due_to_changes_on_table//

CREATE DEFINER=root@localhost PROCEDURE procedure_to_run_processes_due_to_changes_on_table(IN table_row_id VARCHAR(255))
READS SQL DATA
BEGIN

    -- Write your MySQL code to perform when a `table` row is inserted or updated here

END//
DELIMITER ;

您注意到,当我完成定义触发器和过程的业务时,我会小心地恢复分隔符。

票数 51
EN

Stack Overflow用户

发布于 2013-06-23 21:10:29

不幸的是,我们不能在插入或更新描述之后在MySQL 中使用,就像在Oracle中一样

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1318224

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档