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是 is single。这不能用传统的键来完成,所以我想我会使用 Trigger 来检测一行的插入,检查 if type='single',查找带有 的行,如果type='single' and refid=new.refid找到,则抛出一个重复的条目错误。

我使用的是 MySQL 5.5,所以SIGNAL SQLSTATE我可以使用。我可以使用它来触发 Duplicate Key 错误以处理ON DUPLICATE KEY UPDATE查询的一部分吗?如果可以,如何处理?

作为替代方案,我可以更新触发器中的行并返回一般错误条件,但我认为工作会更好(或至少更直观)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 回答