mysqlトリガnull値の処理

949 ワード

に質問
テーブル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;