数据库
首页 > 数据库> > MySQL触发NEW行的设置值,并在同一个表中更新另一行

MySQL触发NEW行的设置值,并在同一个表中更新另一行

作者:互联网

我有一张桌子,我跟踪特定项目的费用.这些费用可能会随着时间的推移而变化,所以我有两列(startDate,endDate),当前的费用总是在不久的将来有一个endDate.我已经有一个触发器用于对输入的新行进行一些计算,但我想要发生的是如果我输入一个已经有条目的项目我想将前一个条目的endDate设置为前一天新条目的startDate和新的endDate到预定的远期日期.这是我首先尝试的代码:

CREATE
DEFINER=`root`@`%`
TRIGGER `im`.`splitBeforeIns`
BEFORE INSERT ON `im`.`split`
FOR EACH ROW
BEGIN
    SET NEW.tcPercent = (NEW.tcOfficeFee / NEW.globalFee) * 100 , NEW.proPercent = 100 - NEW.tcPercent, NEW.endDate = 20501231;
    UPDATE im.split set endDate = ADDDATE(NEW.startDate, -1) where procKey = NEW.procKey AND endDate = 20501231;
END$$

我得到的错误是:

ERROR 1442: Can't update table 'split' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

解决方法:

对此的答案可能是不受欢迎的,但它是:你不能这样做.

触发器无法更新与该行相同的表的另一行,从中调用触发器.

执行此操作的典型方法是创建存储过程,该存储过程插入/更新目标表,然后更新事务中的所有其他行.

标签:database-trigger,mysql
来源: https://codeday.me/bug/20190926/1818604.html