ENUM フィールドを含むテーブルがあります。ENUM の特定の値が、参照 ID 列との一意性を必要とするようにしたいと考えています。だから私はこれを持っているとしましょう:
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`type` ENUM('single','multi') NOT NULL,
`refid` INT UNSIGNED NOT NULL,
`extra` TEXT,
PRIMARY KEY (`id`)
一意のキーになりたい(type,refid)
のですが、の場合のみtype
ですsingle
。これは従来のキーでは実行できないため、トリガーを使用して行の挿入を検出し、 をチェックtype='single'
し、 で行を探し、type='single' and refid=new.refid
見つかった場合は重複エントリ エラーをスローすることにしました。
私はMySQL 5.5を使用しているので、SIGNAL SQLSTATE
利用できます。ON DUPLICATE KEY UPDATE
これを使用して、クエリの一部を処理するために重複キー エラーを発生させることはできますか?
別の方法として、Trigger の行を更新して一般的なエラー状態を返すこともできますが、作業を行う方が適切 (または少なくとも直感的) だと思いますON DUPLICATE KEY UPDATE
。