与主键的唯一性/关系的索引和约束

时间:2013-03-12 18:29:50

标签: mysql sql indexing rdbms database-performance

我需要在脑海中清除以下内容。

当我创建一个没有主键或唯一约束的表时,我得到一个平面文件 当我创建主键时,会创建一个主索引,并且正是这个索引维护了主键的唯一性,对吧?所以我不能添加重复的值 因此,如果我在任何列上创建索引,这会强制列具有唯一值吗?或者这取决于使用关键字UNIQUE来创建索引? 最后,每当我声明一个具有UNIQUE约束的列时,是否意味着创建了索引,因此这些操作是可以互换的?

2 个答案:

答案 0 :(得分:1)

  

当我创建主键时,会创建一个主索引   正是这个索引维护了主键的唯一性,   正确?

是的,虽然主键索引与唯一索引不完全相同(它比'常规'唯一索引具有某些优先级。

  

因此,如果我在任何列上创建索引,则会强制执行该列   有独特的价值观?或者这取决于使用关键字UNIQUE   索引创建?

表列的索引不会自动将列值限制为唯一,除非您明确使用UNIQUE INDEX

  

最后每次我声明一个具有UNIQUE约束的列时   这意味着创建了索引,因此这些操作都是   可互换?

通过UNIQUE INDEX创建唯一约束。它们是同一个东西。

答案 1 :(得分:1)

  1. 如果我们在任何列上创建索引,那么就不会强制执行a 列具有唯一值。可以有重复的值 列,但这些将被编入索引。
  2. 使用关键字UNIQUE强制执行列中的唯一值 对于专栏。
  3. UNIQUE列和主键列之间的区别是 - UNIQUE键列可以在一个且只有一个中保存NULL值 表格行。主键列不会保留空值。
  4. 创建UNIQUE列时,隐式索引为 创建。但是在列上创建索引并不意味着 列的所有行值都是UNIQUE。所以他们不是 互换。