MySQLのV 5.6MySQLのトリガ:列が更新の一部ではありませんがnull
こんにちはありませんが、私はUPDATE BEFOREトリガーに問題がある:テーブルの上に、私はtinyint型、NOT NULLとしてフラグdefiendを持っています、デフォルト値1。私は行が更新された場合は常に、このフラグを1に設定するbefore update triggerを持っています。しかし、私はまた、明示的に0にフラグを設定するために、1つのプロセスで必要なので、私は
create trigger t BEFORE UPDATE on table for each row
BEGIN
IF new.flag is NULL THEN
set new.flag = 1
END IF;
問題ことを試してみました:new.flagがnullになることはありません。 Iは、更新クエリ内のフラグを含めずにテーブルを更新するたびに
IF new.flag is NULL THEN
set new.flag = 1
ELSEIF new.flag = 0 THEN
set new.flag = 3
END IF;
でチェックが3に列を設定します。さらに悪いことに、私が使用している場合(「」= 0)、trueを返す選択として、1にフラグを置くために、空の文字列に対してチェックすることはできません。
IF new.flag is NULL OR new.flag = '' THEN
set new.flag = 1
END IF;
私は明示的に0にフラグを設定することはできません。 NEWでは、更新の一部ではない列をnullにする必要はありませんか?私は何をすることができます、それは変更するMySQLの設定ですか?
おかげ
'new'は、行が更新後に持つ値を含みます(前に' old'があります)。あなたがあなたのクエリでそれを設定しないと、それは前に持っていた値を持ちます( 'new'はあなたの更新クエリで使用したカラムのリストではありません)。たとえば、 update-queryの 'set flag = 3'を、トリガーで0に設定したいマーカーとして指定します。または、ロジックを変更したい場合があります。一般的な更新マーカーは次のとおりです。 'timestamp'フィールドに' on update current_timestamp'を追加します。 – Solarflare
@Solarflare ha、偽の値を設定してから0に設定すると、次のようになります。IF new.flag_indexation_required = 3その後、 が新規に設定されます。flag_indexation_required = 0; ELSE セットnew.flag_indexation_required = 1; END IF;私はそれを受け入れることができるようにあなたの答えを追加できますか? – jlb