在更新时调用触发器会导致mysql中出错

时间:2017-11-24 09:59:40

标签: mysql sql function triggers

我在mysql中创建了一个触发器,该触发器在表中更新行后立即调用。

我收到了这个错误:

#1442 - Can't update table 'users_leave_balance' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

我注意到在调用同一个表的触发器时产生了这个结果,并鼓励使用NEW和OLD,但我仍然会收到此错误。

这是触发器:

DELIMITER $$
CREATE TRIGGER before_balance_update 
    BEFORE UPDATE ON users_leave_balance
    FOR EACH ROW 
BEGIN
    UPDATE users_leave_balance
    SET rollable_till_date = SELECT (getRollableValue(new.period, new.user_id))
    WHERE user_id = new.user_id AND period = new.period AND leave_type = new.leave_type; 
END$$
DELIMITER ;

我正在尝试做的一点照片。

user_id  | period     |  leave_type  |  leave_taken  |  rollable_till_date
134      | 2017-01-01 |  2           |  5.00         |  3.00
134      | 2017-02-01 |  1           |  3.5          |  2.00 (value excluding 3.5)

rollable_till_date列中的值由'getRollableValue(date,userID)'函数计算,它需要来自'leave_taken'字段的值。

问题是更新记录时,会计算rollable_till_date的值,但会排除“leave_taken”的当前值,但这也是必需的。

这是更新查询:

UPDATE users_leave_balance 
SET leave_taken = (leave_taken + $leaveTaken), 
rollable_till_date = (SELECT getRollableValue('$period', $userid))
WHERE user_id = $userID AND period = '$period' AND leave_type = $leaveType

因此,我打算对此使用触发器,以便相应地排除和计算所有值。

我知道这是偏离主题的,但我真的需要一些帮助。任何帮助非常感谢谢谢。 :)

0 个答案:

没有答案