19

MySQL はチェック制約を無視するため、トリガーを使用して挿入または更新の発生を停止するにはどうすればよいでしょうか?

例えば:

テーブル foo にはエージェンシーと呼ばれる属性があり、エージェンシー属性は 1、2、3、4、または 5 のみです。

delimiter $$
create trigger agency_check
before insert on foo
for each row
begin
if (new.agency < 1 or new.agency > 5) then

#Do nothing?

end if;
end
$$
delimiter ;

または、MySQL でチェック制約を実行するためのより良い方法はありますか?

4

2 に答える 2

30

SIGNAL 構文を試してください - https://dev.mysql.com/doc/refman/5.5/en/signal.html

create trigger agency_check
before insert on foo
for each row
begin
  if (new.agency < 1 or new.agency >5) then
    SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'your error message';
  end if 
end

編集

Bill Karwin による以下の一般的なコメントに基づいて更新されました。

于 2012-04-16T05:09:09.350 に答える
5

MySQL のバージョンが 5.5 より古い場合は、テーブルの非 null フィールドを NULL に設定してみてください。これはハックですが、更新または挿入の完了を妨げます。

Naveen が提案する SIGNAL コマンドは見栄えがよく、アップグレード後に使用することを楽しみにしています。

于 2012-04-16T05:31:42.587 に答える