1

次の2つのトリガーを取得しました。それぞれが単独で機能しましたが、一緒には機能しませんでした。

それらを連携させるにはどうすればよいですか?テーブル内のさまざまなフィールドを更新します。

トリガー 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;
$$

最初に更新するときcash1またはcash2更新し、の値を変更する必要がありcurr_cashます。2 番目は、更新時に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

誰でもこれで私を助けることができますか?

4

2 に答える 2

2

問題は 2 番目のトリガーにあります。SETステートメントを使用してフィールド値を変更するには、BEFORE UPDATEトリガーを使用してみてください-

CREATE TRIGGER suma_u BEFORE UPDATE ON `current` FOR EACH ROW
BEGIN
  SET new.`mysum` = new.`curr_cash` + new.`mysum`;
END;
于 2012-12-03T13:30:07.817 に答える
0

トリガーでトリガーが作成されたテーブルを更新することはできません。MySQL にはロック メカニズムがあり、トリガーをトリガーした同じテーブルの行を更新できないため、トリガーの再帰呼び出しと無限ループが発生する可能性があります。

于 2012-12-03T13:45:54.830 に答える