![](/img/trans.png)
[英]trigger to update specific column when insert/update happened in same table
[英]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.