【发布时间】:2023-03-30 06:52:01
【问题描述】:
我正在尝试对列组合而不是单个列设置独特的限制。我有一个表格,“标签”:
- id (int, PK, AI, unsigned)
- 标签(varchar 25)
- user_id(整数,无符号)
按照this question的回答,我尝试通过以下方式设置组合约束:
ALTER TABLE `tags` ADD UNIQUE `unique_tag_user_combo` (`tag`, `user_id`);
到目前为止,一切都很好。但是当我来测试它时,通过查看它是否允许我插入相同的标签两次但使用不同的用户 ID(它应该),它会出错:
INSERT INTO `tags` VALUES (NULL, 'foo', '1'), (NULL, 'foo', '2')
...抛出...
Duplicate entry 'foo' for key 'name_2'
请记住,唯一的限制是 tag + user_id 的组合,所以在我看来,这个查询应该可以正常运行。如果我尝试插入 foo/1 两次,但不是 foo/1 和 foo/2,我可以理解这个错误。我错过了什么?
(编辑 - 还有,错误消息中的“name_2”引用是什么意思?我没有具有该名称的列...)
【问题讨论】:
-
在插入这些值之前,您是否检查过您的表是否为空?
-
它是 - 我新截断了它。
-
也许您在标签上也有唯一索引?name_2 问题..
-
SHOW CREATE TABLE yourtb -
该死的......上面已经有一个独特的说明,你是对的。如果您将该评论发布为答案,我会接受。谢谢。