触发器执行报错it is already used by statement
Posted xk920
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了触发器执行报错it is already used by statement相关的知识,希望对你有一定的参考价值。
Can‘t update table ‘book‘ in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
场景:
1.创建一个触发器,当往图书表中插入一条数据时,在图书表的日期字段中插入当天的日期(now())。
create table book ( id int primary key auto_increment, name varchar(20) not null, author varchar(20), price double(7,2), bdate date );
这里设置触发器:
CREATE TRIGGER add_date2 AFTER INSERT ON book FOR EACH ROW UPDATE book SET new.bdate=NOW();
触发器创建是成功的,但是当执行插入操作时,会报错:
这是因为在操作和更新是在同一个表中时,会有一个写锁,导致你update是无法执行成功的,
所以我们要使用set变量的方法去创建这个触发器
先删除之前的触发器:
DROP TRIGGER add_date2;
重新创建触发器:
CREATE TRIGGER add_date2 BEFORE INSERT ON book FOR EACH ROW SET new.bdate=NOW();
这里是变量的形式,所以直接是在插入之前(before)set插入数据中的bdate这个变量。
重新创建成功后,再次执行插入操作:
插入成功。
以上是关于触发器执行报错it is already used by statement的主要内容,如果未能解决你的问题,请参考以下文章
Address localhost:1099 is already in use(IDEA启动Tomcat报错1099 is already in use)
解决IDEA报错Address localhost:1099 is already in use
IDEA启动Tomcat报错1099 is already in use
IDEA无法启动debugger,报错Address localhost:1099 is already in use
django启动server报错Error: That port is already in use.
idea 启动 web项目 报错 Error running 'Unnamed': Address localhost:1099 is already in use