我有一个表,其中包含一个 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
。