mysqlトリガnull値の処理
949 ワード
に質問
テーブルdemoにフィールドnameがあり、テーブルにいくつかのデータがあり、トリガtrgger_update_demo対テーブルdemoのトリガポリシーはAFTER UPDATEであり,nameが変化すると古いデータを別のテーブルに挿入する.テーブルdemoのnameフィールドを変更し、トリガtrgger_update_demoには対応操作があります.次の操作を行います.
トリガが対応していないことがわかりました.
トリガ内のnameのモニタリングは次のとおりです.
の原因となる
@new_name!=@old_nameはnull値を監視することはできません.
解決策
テーブルdemoにフィールドnameがあり、テーブルにいくつかのデータがあり、トリガtrgger_update_demo対テーブルdemoのトリガポリシーはAFTER UPDATEであり,nameが変化すると古いデータを別のテーブルに挿入する.テーブルdemoのnameフィールドを変更し、トリガtrgger_update_demoには対応操作があります.次の操作を行います.
update demo set name='Tom' where name is null;
update demo set name=null where name='Green';
トリガが対応していないことがわかりました.
トリガ内のnameのモニタリングは次のとおりです.
SET @new_name=NEW.name;
SET @old_name=OLD.name;
IF
@new_name!=@old_name
THEN
insert into demo_trgger (new_name,old_name)values(@new_name,@old_name);
END IF;
の原因となる
@new_name!=@old_nameはnull値を監視することはできません.
解決策
SET @new_name=NEW.name;
SET @old_name=OLD.name;
IF
@new_name!=@old_name
OR
(@new_name IS NULL AND @old_name IS NOT NULL) OR ( @new_name IS NOT NULL AND @old_name IS NULL)
THEN
insert into demo_trgger (new_name,old_name)values(@new_name,@old_name);
END IF;