0

我正在尝试编写一个 mysql 触发器来根据同一个表中其他字段的值更新一个字段。

我有一个包含 3 个复选框字段的表,即 checkbox_1、 checkbox_2、 checkbox_3 。我有另一个字段,即第 4 个字段,我需要根据 checkbox1/2/3 值中存在的值更新“status_status”字段。如果所有复选框的值都是 1,我想将字段 status_status 更新为 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
4

1 回答 1

0

当引用正在更新的行的字段时,使用 OLD 引用更改前的值,使用 NEW 引用更改后的值:

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;
于 2013-04-23T14:43:31.577 回答