MySQL信号重复键错误

时间:2013-01-09 03:34:13

标签: mysql triggers

我有一个表,其中包含一个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)成为唯一键,但前提是typesingle。使用传统密钥无法做到这一点,所以我想我会使用Trigger来检测行的插入,检查是否type='single',查找type='single' and refid=new.refid的行,并抛出重复的条目错误如果找到了。

我正在使用MySQL 5.5,所以我可以使用SIGNAL SQLSTATE。我是否可以使用它来触发重复键错误以处理查询的ON DUPLICATE KEY UPDATE部分,如果是,如何处理?

作为替代方案,我可以更新Trigger中的行并返回一般错误条件,但我认为让ON DUPLICATE KEY UPDATE工作会更好(或至少更直观)。

2 个答案:

答案 0 :(得分:0)

REPLACE INTO。 DERP!忘了这一切。

答案 1 :(得分:-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