创建在 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
,因此您需要设置 new
值 AvailabilityRate
所以触发器变成了
delimiter //
CREATE TRIGGER availability_BEFORE_UPDATE BEFORE UPDATE ON availability
FOR EACH ROW
BEGIN
set new.AvailabilityRate=new.AvailableRooms/new.SumRooms;
END;//
delimiter;
我有一个 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
,因此您需要设置 new
值 AvailabilityRate
所以触发器变成了
delimiter //
CREATE TRIGGER availability_BEFORE_UPDATE BEFORE UPDATE ON availability
FOR EACH ROW
BEGIN
set new.AvailabilityRate=new.AvailableRooms/new.SumRooms;
END;//
delimiter;