我有一个如下所示的表格:
|idAvailability|SumRooms|AvailableRooms|可用率|
除了AvailabilityRate 是float 之外,所有内容都是int。 我想创建一个触发器,当更新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
但它引发了我这个错误:
执行:
更新 ergasia.availability SET availableRooms=15 WHERE idAvailability=1;
错误 1442: 1442: 无法更新存储函数/触发器中的表可用性,因为它已被调用此存储函数/触发器的语句使用。
SQL语句:
更新 ergasia.availability SET availableRooms=15 WHERE idAvailability=1
最佳答案
您无法更新执行触发器的同一个表。由于您使用的是before update
,因此您需要设置AvailabilityRate
new
值
因此触发器变为
delimiter //
CREATE TRIGGER availability_BEFORE_UPDATE BEFORE UPDATE ON availability
FOR EACH ROW
BEGIN
set new.AvailabilityRate=new.AvailableRooms/new.SumRooms;
END;//
delimiter;
关于mysql - 创建触发器,在更新表后自动更新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30220833/