2013-04-23 92 views
0

我想寫一個mysql觸發器來根據同一個表中其他字段的值更新一個字段。Mysql觸發器需要幫助

我有一個帶有3個複選框的表格,分別是checkbox_1,checkbox_2,checkbox_3。我有另一個字段是第四個字段,我需要根據複選框1/2/3值中的值更新「status_status」字段。我想更新field status_status爲1,如果所有的複選框的值都是1,那麼我正在試圖去做。

delimiter $$ 
create trigger emp_final_status 
after update on tester.status_master 
for each row 
begin 
if checkbox_1 = '1' and checkbox_2= '1' and checkbox_3= '1' 
then 
update tester.status_master set status_status=1; 
END IF; 
END 
+1

使用觸發'update'前,然後,而不是'更新...'只是'設置新。 status_status = 1'。但是這個邏輯真的屬於數據庫嗎? – eggyal 2013-04-23 14:07:21

回答

0

當指的行領域的更新,使用舊的變化和新的前參考值參考值變化後:

delimiter $$ 
create trigger emp_final_status 
BEFORE update on tester.status_master 
for each row 
begin 
if NEW.checkbox_1 = '1' and NEW.checkbox_2= '1' and NEW.checkbox_3= '1' 
then 
    set NEW.status_status=1; 
END IF; 
END 

我也改變了從AFTER到BEFORE之間的觸發器。在BEFORE觸發器中,您可以影響更新的值。

我在條件內改變了你的代碼。在那裏,你原來的代碼是:

update tester.status_master set status_status=1; 

這是一個update聲明沒有where條款,這意味着,你正在請求set status_status=1所有行在你的表!

相反,你只想讓此刻正在處理變化的一行:

set NEW.status_status=1;