gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-28 23:46:39 26 4
gpt4 key购买 nike

我有一个表格,用于跟踪特定项目的费用。这些费用会随着时间的推移而变化,所以我有两列(开始日期、结束日期),当前的一组费用总是有一个遥远的 future 的结束日期。我已经有一个触发器,我用它来对正在输入的新行进行一些计算,但我还想发生的是,如果我输入一个已经有条目的项目,我想将前一个条目的 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.

最佳答案

这个问题的答案可能不受欢迎,但它是:你不能那样做。

触发器不能更新同一表的另一行作为从中调用触发器的行。

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

关于MySQL触发器为新行设置值并更新同一个表中的另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11247590/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com