5

日付列の既存の日付が上書きされないように保護したいと考えています。そのため、日付列への更新を許可せず、既存のフィールド値が NULL の場合にのみ挿入を許可します (日付列のデフォルトは NULL)。トリガーは MySQL でこれを達成する唯一の方法ですか? もしそうなら、以下のトリガーは機能しますか?

create trigger date_check
before insert, update on date
for each row
begin
if(date IS NOT NULL) then
 SIGNAL 'date already set'
end if ;
end ;

背景: ユーザー エラーが原因で誤って変更された重要な日付を含むテーブルがあります。これが再び発生するのを防ぐために、ユーザー インターフェイスにいくつかのチェックを入れましたが、可能であれば、データベースと直接やり取りする別の安全層が必要です。

4

3 に答える 3

3

はい、MySQL ではトリガーがこれを行う唯一の方法です。MySQL は制約をサポートしていません。

あなたのトリガーは正確ではありません。まず、 がありますがupdate on date、これは である必要がありますupdate on <table name>。次に、更新に使用される日付の値を確認しています。おそらくあなたは次のことを意味します:

create trigger date_check_update
before update on <the table name goes here>
for each row
begin
    if (old.date IS NOT NULL) then
        SIGNAL 'date already set'
    end if ;
end;

この条件でのinsertトリガーは意味がありません。

于 2013-09-17T03:30:21.203 に答える