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

发布于 2021-02-02 16:24:10

我有一张桌子,可以跟踪特定项目的费用。这些费用会随时间变化,因此我有两列(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.
关注者
0
被浏览
127
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    答案可能不受欢迎,但答案是:您不能这样做。

    触发器不能 调用该触发器的行 更新同一表的另一行

    这样做的典型方法是创建一个存储过程,该存储过程将插入/更新目标表,然后更新事务中的所有其他行。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看