mysql 触发器update_MySql触发器对同表更新

本文介绍了在MySQL中创建触发器时遇到的问题。当试图在触发器中更新同一张表时,出现了错误。解决方案是将触发器类型从AFTER改为BEFORE,并使用SET语句来修改NEW行的数据,而不是使用UPDATE语句。文章详细阐述了BEFORE和AFTER触发器的区别,并提供了正确的触发器创建语法。
摘要由CSDN通过智能技术生成

触发器初始结构:

DELIMITER $$

CREATE

TRIGGER `数据库名`.`触发器名` BEFORE/AFTER INSERT/UPDATE/DELETE

ON `数据库名`.`表名`

FOR EACH ROW BEGIN--逻辑、条件语句

END$$

DELIMITER ;

目的:当一张表中的某个字段值更新为特定值时,触发更新本条数据的另一字段值

(示例:根据prj_base_info表中的project_status的值判断是否是600时,触发更新同表的complete_time字段的时间为系统当前时间)

1、开始写出的触发器如下所示

DROP TRIGGER IF EXISTS update_complete_time;

DELIMITER $

CREATE TRIGGER update_complete_time AFTER UPDATE

ON prj_base_info FOR EACH ROW

BEGIN

IF (new.project_status=600)

THEN

UPDATE prj_base_info

SET complete_time=DATE_FORMAT(NOW(), '%Y-%m-%d')

WHERE prj_base_info.id= new.id;

END IF;

END $

执行结果没有问题,创建触发器成功,但是执行update语句进行测试如下报错,提示:无法更新存储函数/触发器中的表'prj_base_info'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值