zoukankan      html  css  js  c++  java
  • 触发器执行报错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这个变量。

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

     插入成功。

  • 相关阅读:
    poj3635(最短路)
    poj 3041( 最大匹配)
    poj 3522(生成树)
    poj 1904(强连通分量)
    poj 2446(二分匹配)
    poj 2400(最小权匹配)
    poj 2175(费用流消圈)
    poj 1256(搜索)
    poj 2195(最小费用流)
    poj 3613(最短路)
  • 原文地址:https://www.cnblogs.com/xk920/p/11655723.html
Copyright © 2011-2022 走看看