两个触发器,我在更新表时遇到错误

时间:2012-12-03 13:25:07

标签: mysql sql triggers

我得到了以下两个触发器,每个触发器单独工作,但他们没有一起工作。

如何让它们一起工作?他们更新表格中的不同字段。

触发1:

create trigger wys_sk_u after update on `things`
for each row
begin
UPDATE `current` s 
INNER JOIN things u ON s.id_thing = u.id_thing
INNER JOIN dude_base b ON b.id= s.id
SET s.`curr_cash` = u.cash1 * b.cash2/ 100;
end;
$$

触发器2:

create trigger suma_u after update on `current`
for each row
begin
UPDATE `current`
SET `mysum` = `curr_cash` + `mysum`;
end;
$$

第一个应在cash1cash2更新时更新,并更改curr_cash的值。 其次应在curr_cash更新时更新,并更改mysum

编辑表格时出现以下错误:

#1442 - Can't update table 'current' in stored function/trigger because it is already used by statement which invoked this stored function/trigger. 

@edit 为这个问题增添了新的感觉。


如果我想做这样的事情怎么办?

CREATE TRIGGER total BEFORE UPDATE ON `current` FOR EACH ROW
BEGIN
if new.`new_pay_date` <> old.`new_pay_date`
  SET new.`total_cash` = new.`curr_cash` + new.`total_cash`;
end if;
END;
$$

错误:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET new.`total_cash` = new.`curr_cash` + new.`total_cash`; end if;' at line 4

这没有

if new.`new_pay_date` <> old.`new_pay_date`
end if;

但我需要检查一下,并且只更新日期更改。

当前表:

curr_cash
new_pay_date
id_person
id_thing
total_cash

任何人都可以帮我这个吗?

2 个答案:

答案 0 :(得分:2)

问题在于第二次触发。尝试使用BEFORE UPDATE触发器使用SET语句更改字段值 -

CREATE TRIGGER suma_u BEFORE UPDATE ON `current` FOR EACH ROW
BEGIN
  SET new.`mysum` = new.`curr_cash` + new.`mysum`;
END;

答案 1 :(得分:0)

无法更新在触发器中为其创建触发器的表。 MySQL上有锁定机制,这样你就无法更新触发触发器的同一个表的行,它可以导致对触发器和无限循环的递归调用。