触发器执行报错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这个变量。

重新创建成功后,再次执行插入操作:

 

 插入成功。

 

posted @ 2019-10-11 17:42  X凯  阅读(2012)  评论(1编辑  收藏  举报