创建在 table 更新后自动更新列的触发器

Create Trigger which updates a column automatically after update of a table

我有一个 table 看起来像这样:

|idAvailability|SumRooms|AvailableRooms|AvailabilityRate|

除了 AvailabilityRate 是浮点数以外,其他都是整数。 我想创建一个触发器,当更新 AvailableRooms 列时,由于触发器的存在自动更新列 AvailabilityRate。

这是我目前所做的。

CREATE TRIGGER availability_BEFORE_UPDATE
BEFORE UPDATE ON availability
FOR EACH ROW
BEGIN
  update availability
    set new.AvailabilityRate = new.AvailableRooms/new.SumRooms;
END

但是它抛出了这个错误:

正在执行: UPDATE ergasia.availability SET AvailableRooms=15 WHERE idAvailability=1;

错误 1442:1442:Can't update table availability in stored function/trigger because it is already used by statement which invoked this stored function/trigger. SQL Statement: UPDATE ergasia.availability SET AvailableRooms=15 WHERE idAvailability=1

你应该只需要这部分:

SET NEW.AvailabilityRate := NEW.AvailableRooms/NEW.SumRooms;

您不是在更新行,而是在修改行更新时使用的值。

您不能更新执行触发器的相同 table。由于您使用的是 before update,因此您需要设置 newAvailabilityRate

所以触发器变成了

delimiter //
CREATE TRIGGER availability_BEFORE_UPDATE BEFORE UPDATE ON availability 
FOR EACH ROW 
 BEGIN 
  set new.AvailabilityRate=new.AvailableRooms/new.SumRooms;
 END;//
delimiter;