4

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

4

2 に答える 2

0

REPLACE INTO。ダープ!そのことをすべて忘れました。

于 2013-01-09T15:54:44.090 に答える
-1

トリガーの下で試してください。私はトリガーを書くのが得意ではありません。以下のコードは実行していません。これをプロトタイプとして使用できます。

CREATE TRIGGER checkDuplicateEntry
   BEFORE INSERT OR UPDATE OF type, ref_id ON employees
   DECLARE @duplicateCount INT;
   FOR EACH ROW
   IF ( new.type <> 'single' )
        BEGIN
           @duplicateCount = count(*) from yourTableName where type = 'single' AND refid = new.refid
        END;

   IF ( duplicateCount  > 0 )
        BEGIN
             SIGNAL SQLSTATE VALUE '99999'
             SET MESSAGE_TEXT = 'Duplicate Entry';
        END
于 2013-01-09T04:06:55.310 に答える