我在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
因此,我打算对此使用触发器,以便相应地排除和计算所有值。
我知道这是偏离主题的,但我真的需要一些帮助。任何帮助非常感谢谢谢。 :)