Primary Key & Index

主键,Primarykey。索引,Index。主键一般跟唯一键,对应。Primary Key跟Unique 对应,本质上没有什么意义,只是一种约束。
但是在建立Primary key 跟Unique key时候都会建立对应的Index索引,才是有存在实质意义的。
 在某种程度上,主键=Unique+not null。主键对应主键索引,类似唯一键对应唯一索引。而主键跟唯一索引存在本质的不同。主键是一种约束,而唯一索引是一种索引。另外较重要的区别,主键能够被其他表的当做外键关联起来。而索引则不行。
  主键索引跟唯一索引。主键索引其值唯一标识表中的每一行 。唯一索引,其索引的值不能存在相同值。主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。 
  相比之下,联合主键就跟联合唯一索引对应。类比于主键跟索引的区别。联合主键,由多column组成一个义主键将自动创建主键索引,
 主键,可以更加的避免数据的重复性,从而更加保障能够对应数据的唯一性,成为数据的唯一识别的标示。联合唯一索引,对应于唯一索引。
  建立索引的目的就是为了加快查找数据的速度。但是会占用物理空间。同时减慢数据库的增删改的效率。
适合建立索引的情况:
1 经常需要搜索的列上,可以加快搜索的速度。2在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度 
Duplicate entry是一种Key的冲突,这个Key可以使主键,也可以是唯一键。因为主键跟唯一键都不能重复,一旦重复就会报这个冲突错误。 只有这两种情况下,有主键或者唯一键-即联合主键或联合唯一索引,一旦数据重复,就会提示Duplicate entry这个错误。




    唯一索引
唯一索引不允许两行具有相同的索引值。
如果现有数据中存在重复的键值,则大多数数据库都不允许将新创建的唯一索引与表一起保存。当新数据将使表中的键值重复时,数据库也拒绝接受此数据。例如,如果在 employee 表中的职员姓氏(lname) 列上创建了唯一索引,则所有职员不能同姓。


主键索引
主键索引是唯一索引的特殊类型。
数据库表通常有一列或列组合,其值用来唯一标识表中的每一行。该列称为表的主键。
在数据库关系图中为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型。主键索引要求主键中的每个值是唯一的。当在查询中使用主键索引时,它还允许快速访问数据。


它们的一些比较:
(1)对于主健/unique constraint , oracle/sql server/mysql等都会自动建立唯一索引;
(2)主键不一定只包含一个字段,所以如果你在主键的其中一个字段建唯一索引还是必要的;
(3)主健可作外健,唯一索引不可;
(4)主健不可为空,唯一索引可;
(5)主健也可是多个字段的组合;
(6)主键与唯一索引不同的是:
a.有not null属性;
b.每个表只能有一个。

版权声明:本文为博主原创文章,未经博主允许不得转载。

posted @ 2015-08-17 19:03  小霸王易水寒  阅读(154)  评论(0编辑  收藏  举报