2015-05-13 122 views
0

我有一個表,看起來像這樣:創建觸發器其表的更新後自動更新列

| idAvailability | SumRooms | AvailableRooms | AvailabilityRate |

一切都是int,除了AvailabilityRate是float。 我想創建一個觸發器,當更新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

回答

0

您無法更新執行觸發器的同一張表。由於您使用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; 
+0

20時06分36秒\t CREATE TRIGGER availability_BEFORE_UPDATE BEFORE UPDATE可用性FOR EACH ROW BEGIN設置new.AvailabilityRate = new.AvailableRooms/new.SumRooms;結束; \t錯誤代碼:1235.此版本的MySQL尚不支持'具有相同動作時間和一個表的事件的多個觸發器'\t 這是我嘗試創建它時顯示的內容。我用戶MySQL的工作臺 0.000秒 – Filippos

+0

你有一些其他的觸發器與'更新前'這個表,因此你得到這個錯誤。你需要在一個觸發器中調整所有內容並刪除其他內容。 –

+0

嗯,是的,你是對的!我忘了刪除舊的觸發器!所以,再次感謝! @Abhik Chakraborty – Filippos

0

你應該只需要這一部分:

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

您沒有更新行,您正在修改行正在更新的值。