我有一个表,其中包含一个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
。使用传统密钥无法做到这一点,所以我想我会使用Trigger来检测行的插入,检查是否type='single'
,查找type='single' and refid=new.refid
的行,并抛出重复的条目错误如果找到了。
我正在使用MySQL 5.5,所以我可以使用SIGNAL SQLSTATE
。我是否可以使用它来触发重复键错误以处理查询的ON DUPLICATE KEY UPDATE
部分,如果是,如何处理?
作为替代方案,我可以更新Trigger中的行并返回一般错误条件,但我认为让ON DUPLICATE KEY UPDATE
工作会更好(或至少更直观)。
答案 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