触发器执行报错it is already used by statement

Posted xk920

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了触发器执行报错it is already used by statement相关的知识,希望对你有一定的参考价值。

Cant 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