mysql的触发器不能对本表进行update操作,如下面 的示例,直接报
Can’t update table ‘tbl’ in stored function/trigger because it is already used by statement which invoked this stored function/trigger 错误,
如果你在触发器里面对刚刚插入的数据进行了 insert/update, 则出现这个问题。因为会造成循环的调用.
create trigger test
before update on test
for each row
update test set NEW.updateTime = NOW() where id=NEW.ID;
END
应该使用set操作,而不是在触发器里使用 update,比如
create trigger test
before update on test
for each row
set NEW.updateTime = NOW();
END
若涉及多个表,则可采取声明局部变量的方式,如下所示
create Trigger updateExam
before insert
on hrt_exam_action_examinee for each ROW
BEGIN
declare personName varchar(50);
declare area varchar(50);
declare deptName varchar(200);
declare idCard varchar(50);
declare courseName varchar(100);
select e.fd_name,e.fd_import_info,e.fd_importal_link into personName,area,deptName from sys_org_element e where e.fd_id = NEW.fd_org_id;
select p.fd_login_name into idCard from sys_org_person p where p.fd_id = NEW.fd_org_id;
select ea.fd_describe into courseName from hrt_exam_action ea where ea.fd_id = NEW.fd_action_id;
set NEW.fd_person_name=personName,NEW.fd_area=area,NEW.fd_dept_name=deptName,NEW.fd_id_card=idCard,NEW.fd_course_name=courseName;
end;
delimiter;
若出现ERROR 1406 : Data too long for column Data too long for column ,
首先检查mysql的默认编码,或者在my.ini里找到
sql-mode=”STRICT_TRANS_TABLES,NO_AUTO_Create_USER,NO_ENGINE_SUBSTITUTION”
把其中的STRICT_TRANS_TABLES,去掉,
或者把sql-mode=STRICT_TRANS_TABLES,NO_AUTO_Create_USER,NO_ENGINE_SUBSTITUTION
注释掉,然后重启mysql就ok了
分享到:
相关推荐
mysql触发器使用mysql触发器使用mysql触发器使用mysql触发器使用mysql触发器使用mysql触发器使用mysql触发器使用mysql触发器使用mysql触发器使用mysql触发器使用mysql触发器使用mysql触发器使用mysql触发器使用mysql...
本文实例讲述了mysql触发器之创建多个触发器操作。分享给大家供大家参考,具体如下: 这次记录的内容mysql 版本必须得是5.7.2+的哈,之前的会不好使的。废话不多说,咱们开始正文哈。 在mysql 5.7.2+版本之前,我们...
主要介绍了mysql触发器之触发器的增删改查操作,结合实例形式分析了mysql触发器的定义及使用触发器进行增删改查等相关操作技巧,需要的朋友可以参考下
MySQL触发器教程
手册上还说触发器可以从其他表上来删除,或者是当你删除一个事务的时候激发,无论他说的是什么意思,忘掉吧,MySQL不会去实现这些的。 最后关于说使用触发器会对查询速度产生影响的说法也是错的,触发器不会对查询...
mysql触发器+存储过程
MySQL触发器
MYSQL触发器,可以使用它用来进行监控,例如商品价格变化,下单后商品库存减少等实用性操作!
触发器是与表有关的数据库对象,在对表进行insert/update/delete之前或之后,会触发并执行触发器中定义的SQL语句。触发器的这种特性可以协助应用在数据库端确保数据的完整性,记录日志,校验数据等。
mysql触发器教程
MySQL触发器说明和编写时的注意事项,其功能越来越强,可以学习
MYSQL触发器在PHP项目中用来做信息备份、恢复和清空 MYSQL触发器在PHP项目中用来做信息备份、恢复和清空
MySQL触发器、存储过程、自定义函数、视图简单示例
mysql触发器
MYSQL触发器与存储过程.ppt
mysql通过触发器实现两个表的同步 目前,在本地测试成功。 假设本地的两个数据库a和b,a下有表table1(id, val) b下有表table2(id, val) 假设希望当table1中数据更新,table2中数据同步更新。 代码: DELIMITER $...
学习mysql触发器的好东西
MySQL触发器深入解析 在MySQL数据库中,触发器是一种特殊类型的存储程序,它能够在某个表上发生特定事件(如INSERT、UPDATE或DELETE)时自动执行。触发器为数据库提供了一种在数据变更时自动执行特定操作的机制,...
本文实例讲述了mysql触发器之创建使用触发器。分享给大家供大家参考,具体如下: 我们可以可以使用CREATE TRIGGER语句创建一个新的触发器,来看下具体的语法: CREATE TRIGGER trigger_name trigger_time trigger_...