【问题标题】:MySQL: issue setting unique restraint on combination of rowsMySQL:问题设置对行组合的唯一限制
【发布时间】: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
  • 该死的......上面已经有一个独特的说明,你是对的。如果您将该评论发布为答案,我会接受。谢谢。

标签: mysql database unique


【解决方案1】:

标签列上可能还有一个唯一索引。使用

SHOW CREATE TABLE yourtb

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-18
    • 2010-11-26
    • 2011-12-11
    • 1970-01-01
    • 1970-01-01
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多