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ないステートメントです。つまり、テーブル内のすべての行を要求しています!whereset status_status=1

代わりに、現在処理中の 1 つの行だけを変更する必要があります。

   set NEW.status_status=1;
于 2013-04-23T14:43:31.577 に答える