【问题标题】:MySQL KEY/UNIQUE KEYMySQL 键/唯一键
【发布时间】:2012-01-05 12:36:16
【问题描述】:

Google 主要回答关于PRIMARY KEY/UNIQUE KEY 差异的问题。但是 MySQL 中的 KEY/UNIQUE KEY 呢? MySQL中的KEY不能唯一标识一个元组吗?

【问题讨论】:

    标签: mysql sql key


    【解决方案1】:

    不,KEYINDEX 的别名。 INDEX 不必是唯一的。如果KEY(INDEX) 唯一标识了一个元组(一行),那么它就是一个UNIQUE KEY(或一个PRIMARY KEY,具体取决于您如何定义该键)。

    【讨论】:

      【解决方案2】:

      一点也不——带有键的列很容易有重复的值,键有助于快速访问它们。唯一键不允许在该列中插入具有已存在值的行。

      【讨论】:

      • “带有键的列很容易有重复的值”——这肯定与普遍接受的键定义相反吗?
      • 不是真的!密钥与唯一密钥不同 - 对于后者,普遍接受的定义和 MySQL 的行为是不接受重复项
      • 这里的上下文无疑是数据库,在那个上下文中,“key”是“candidate key”的缩写。查看任何通用(非 mySQL)书籍以发现这一点,例如this definition in first book I had to hand:
      • "我在第1章解释了候选键的基本概念,但现在我想让这个概念更精确。这里首先是一个定义: 定义:设K是relvar标题的子集R. 那么 K 是 R 的候选键(或简称为键)当且仅当它具有以下两个属性: 唯一性:R 的任何可能值都不包含两个具有相同 K 值的不同元组。不可约性:否K 的真子集具有唯一性。”
      • 你有引用你的断言吗?
      【解决方案3】:

      在数据库理论中,“键”是唯一约束的同义词。一些数据库管理系统使用索引(物理)来实现唯一约束(逻辑),被称为“唯一索引”。

      对于 mySQL 产品,KEY 是非唯一索引的同义词,我认为这种用法是违反直觉的。

      【讨论】:

      • 您是否有任何资源表明key 是唯一约束的同义词?我还没有读过key == 唯一约束的任何地方。
      • @N.B.:我认为您可以更轻松地搜索“关键”并不意味着唯一性的来源。从“超级键”开始,然后继续到“候选键”(最小超级键)、“主键”(任意候选键)、“外键”(引用候选键)等等。
      • 所以底线是您没有来源确认密钥 == 唯一密钥?
      • @N.B.当然可以:弹出到我的位置,我会告诉你:) 或者你可以使用这些术语(超级键、候选键、主键等)并用谷歌搜索它们,在你选择的数据库书中查找它们等但是显然,避免任何特定于 mySQL 的内容。
      • ...免费找到你的第一个 here :)
      【解决方案4】:

      我知道这是一个旧线程,但 @onedaywhen 在这里是正确的。在数据库理论中,术语“键”是指候选键或超级键,候选键是最小的超级键。如果有多个主键,则选择主键作为候选键之一,因此“键”是唯一的。如有必要,我可以参考我在大学使用的 DB 书籍。

      【讨论】:

      • 是的,完全正确! @onedaywhen
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-20
      • 2011-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-12
      • 1970-01-01
      相关资源
      最近更新 更多