触发器执行报错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这个变量。
重新创建成功后,再次执行插入操作:
插入成功。