【问题标题】:What's the purpose of UNIQUE in MySQL (InnoDB)MySQL(InnoDB)中UNIQUE的目的是什么
【发布时间】:2011-11-14 09:30:50
【问题描述】:

对我来说,UNIQUE 关键字是为了更好地构建您的表格(将 PRIMARY KEY 放在一边,用于识别目的)。例如,文件。如果您不想将相同的文件添加到数据库中,您可以将其 SHA-2 哈希键用作UNIQUE KEY。但是 SHA-2 是 512 个字符,而 InnoDB 有 255 个字符的限制。为什么 MySQL 有这个限制以及如何使用更大、更可靠、唯一的键,例如 SHA-2

【问题讨论】:

    标签: mysql unique


    【解决方案1】:

    SHA2-512 给出 512 位,即 64 字节。或十六进制的 char(128)。

    在 MySQL 5.5 中,唯一索引键长度对于 MyISAM 为 1000 字节,对于 InnoDB 为 767。

    当您选择使用 AUTO_INCREMENT 代理主键时,唯一性用于强制执行自然唯一性。或者当你想enforce subtypes 时,超级键唯一性。等等

    编辑:

    要强制 LOB 值的唯一性,您只需对其进行哈希处理并添加一个约束。如果您有足够多的行来产生可衡量的冲突风险,那么为什么数据库中有这么多 LOB 值?

    【讨论】:

    • 我想是个坏例子,但是varchar(99999)
    • @abhinav:我是按前缀来的
    • @puk:然后你 SHA varchar(65535)。并质疑你的设计。
    • 是的,但我认为使用UNIQUE 的 InnoDB 的限制是 255
    【解决方案2】:

    在 MySQL 中,UNIQUE 用于索引。最好不要用它来检查文本字段的唯一性。

    我总是检查应用程序中的数据完整性和唯一性,而不是 MySQL。

    【讨论】:

    • 您的数据库已损坏。如果不是现在,在某个时候。 -1 认为您可以比数据库引擎更好地检查应用程序中的 1 亿行的唯一性
    • @gbn 我现在很困惑。您是说应该使用UNIQUE 来构建表格吗?如果我希望我的用户表强制每个人都有唯一的 ID(自动)、电子邮件、用户名和昵称,最大长度都大于 255。我应该按照 OP 的建议签入应用程序,还是让 MySQL 处理它。
    • 两者:MySQL 对应用程序生成的哈希强制执行唯一性。在其他 RDBMS 中,您会使用计算列,但 MySQL 不支持它们
    • @gbn "MySQL 对应用程序生成的哈希强制执行唯一性"-> 你能...简化一下吗?这超出了我的想象。
    • 您的 php 会通过电子邮件、用户名和昵称生成哈希。哈希的唯一性由 mysql 中哈希列上的唯一索引强制执行。
    猜你喜欢
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-21
    • 2010-11-04
    • 1970-01-01
    • 2023-03-19
    • 2011-04-18
    相关资源
    最近更新 更多