码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-10-11 18:05:02      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:变量   use   color   ima   after   key   before   statement   drop   

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

标签:变量   use   color   ima   after   key   before   statement   drop   

原文地址:https://www.cnblogs.com/xk920/p/11655723.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!