2013-04-23 88 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;