繁体   English   中英

创建触发器以更新同一表中的特定列后更新某些列

[英]create trigger to update some column after update specific column in same table

我有一个名为BrrowedBookBy 的表,这是表的描述

+--------------------+-------------+------+-----+---------+-------+
| Field              | Type        | Null | Key | Default | Extra |
+--------------------+-------------+------+-----+---------+-------+
| ISBN_B             | char(50)    | YES  |     | NULL    |       |
| PIN_M              | int(11)     | YES  |     | NULL    |       |
| StartDate          | date        | YES  |     | NULL    |       |
| EndDate            | date        | YES  |     | NULL    |       |
| BrrowBookCondition | tinyint(1)  | YES  |     | NULL    |       |
| Late               | tinyint(1)  | YES  |     | NULL    |       |
| ReNew              | tinyint(1)  | YES  |     | NULL    |       |
| Fine               | int(11)     | YES  |     | NULL    |       |
| Fine_Description   | varchar(30) | YES  |     | NULL    |       |
+--------------------+-------------+------+-----+---------+-------+
9 rows in set (0.040 sec)

所以我想在更新BorrowBookCondition列时设置触发器

我这样尝试过,但在玛丽亚不工作

CREATE DEFINER=`root`@`localhost` TRIGGER Set_fine
  AFTER Update ON BorrowedBookBy
   FOR EACH ROW
    UPDATE Fine SET Fine = 50 and fine_description = “Not Meet The Condition”
      where BrrowBookCondition in (select * from BorrowedBookBy where BrrowBookCondition =0);

如果我在没有任何条件的情况下以这种方式键入它,则可以正常工作

CREATE DEFINER=`root`@`localhost` TRIGGER Set_fine
  AFTER Update ON BorrowedBookBy
   FOR EACH ROW
    UPDATE Fine SET Fine = 50 and fine_description = “Not Meet The Condition”;

我糊涂了。 您的触发器引用了另一个名为Fine ,但是您没有提到这一点。

您确定不想在要更新的同一行中设置它吗?

如果是这样的话:

DELIMITER $$

CREATE DEFINER=`root`@`localhost` TRIGGER Set_fine BEFORE Update ON BorrowedBookBy
FOR EACH ROW
BEGIN
    IF NEW.BrrowBookCondition = 0 THEN
        SET Fine = 50;
        SET fine_description = 'Not Meet The Condition;
    END IF;
END;

DELIMITER ;

谢谢您的努力,谢谢!

DELIMITER $$

   CREATE DEFINER=`root`@`localhost` TRIGGER Set_fine After Update ON 
     BorrowedBookBy
      FOR EACH ROW
       BEGIN
         IF new.BrrowBookCondition = 0 THEN
           Update BorrowedBookBy SET new.Fine = 50;
           Update BorrowedBookBy SET new.fine_description = 'Not Meet The Condition';
         END IF;
       END;

DELIMITER $$;

但是我如何更新该表以检查触发器是否正常工作? 我写

update BorrowedBookBy set BrrowBookCondition = 0 where PIN_M = 321178435; 

而这个错误发生了

"`Can't update table 'borrowedbookby' in stored function/trigger because it is already used by statement which invoked this stored function/trigger"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM