2015-06-19 108 views
0

我想在用戶更新後更新我的行。 例如,如果用戶選擇32後,與以前輸入的主要是> 1000,然後更新32至40MYSQL後觸發器更新如果

CREATE TRIGGER updateusers_id AFTER UPDATE ON Table 
FOR EACH ROW 
BEGIN  

IF(NEW.users_id = 32 AND Table.Principal > 50000) THEN 
UPDATE loans SET users_id = 40; 
END IF; 

END 
+0

這很好......究竟是什麼問題? –

+0

MySql錯誤:無法更新存儲的函數/觸發器中的表,因爲它已被調用此存儲函數/觸發器的語句使用 – Alex

+0

也如果我這樣做BEGIN IF(SELECT users_id FROM loans WHERE Principal> 50001)= 32 THEN UPDATE loans SET users_id = 40; END IF; \t END – Alex

回答

1

想想看一秒鐘,你會發現第一個問題:如果你真正需要這裏是一個AFTER更新觸發器...然後BEFORE更新觸發器會做什麼?

AFTER UPDATE表示更新查詢已更改行數據後。你實際上想要的是BEFORE UPDATE - 你希望在表數據實際發生變化之前劫持更新,並且可能會修改實際寫入數據庫的值。

UPDATE loans SET users_id = 40; 

這有兩個問題。首先,你知道什麼UPDATE沒有WHERE沒有......對嗎?它更新表中的所有行。幸運的是,服務器並沒有讓你這樣做。但解決的辦法是不添加WHERE條款 - 那就是:

IF(NEW.users_id = 32 AND NEW.Principal > 50000) THEN 
    SET NEW.users_id = 40; 
END IF; 

NEW pseudotable包含行數據用戶試圖引起UPDATE(觸發觸發器)寫入一行。您處於BEFORE UPDATE ... FOR EACH ROW觸發器中,因此設置NEW值將覆蓋用戶試圖執行的任何操作......這似乎是您想要完成的操作。