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

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

     插入成功。

  • 相关阅读:
    atom那些事儿
    浙江省和杭州市
    Web API之indexedDB和Web SQL
    绝对定位元素居中
    多列等高布局
    git生成ssh key及github ssh key对接
    vuejs模板使用方法
    css3动画图片波纹效果
    sticky footer布局,定位底部footer
    css3圆环闪烁动画
  • 原文地址:https://www.cnblogs.com/xk920/p/11655723.html
Copyright © 2020-2023  润新知