主要,唯一和外键约束和索引之间有什么区别?

Gol*_*old 23 database sql-server oracle indexing constraints

是什么区别primary,unique并且foreign key constraints,和indexes

我工作Oracle 10gSQL Server 2008

Nad*_*LEM 26

主键和唯一键是实体完整性约束

主键允许唯一标识表中的每一行,并确保不存在重复行且不输入空值.

唯一键约束用于防止表行中的键值重复并允许空值.(在oracle中,一个null不等于另一个null).

  • KEY或INDEX指的是正常的非唯一索引.允许索引的非不同值,因此索引可以包含索引的所有列中具有相同值的行.这些索引不会对您的数据强制执行任何结构,因此它们仅用于加速查询.
  • UNIQUE指的是索引的所有行必须唯一的索引.也就是说,对于此索引中的所有列,同一行可能不具有与另一行相同的非NULL值.除了用于加速查询之外,UNIQUE索引还可用于强制执行数据结构,因为数据库系统在插入或更新数据时不允许破坏此不同值规则.您的数据库系统可能允许对允许NULL值的列使用UNIQUE索引,在这种情况下,如果两行都包含NULL值(NULL被认为不等于自身),则允许两行相同,尽管这可能是不合需要的,具体取决于您的应用.
  • PRIMARY的行为与UNIQUE索引完全相同,只是它总是命名为'PRIMARY',并且表中可能只有一个(并且应该总是有一个;尽管某些数据库系统不强制执行此操作).PRIMARY索引旨在唯一标识表中的任何行,因此不应在允许NULL值的任何列上使用它.您的PRIMARY索引应始终位于足以唯一标识行的最小列数上.通常,这只是一个包含唯一自动递增数字的列,但如果还有其他任何可以唯一标识行的列,例如国家/地区列表中的"countrycode",则可以使用该列.
  • FULLTEXT索引与上述所有索引都不同,并且它们在数据库系统之间的行为差​​异更大.与上面的三个(通常是b-tree(允许从最左列开始选择,排序或范围)或散列(允许从最左列开始选择)不同,FULLTEXT索引仅对使用MATCH()/ AGAINST()子句.

看看MySQL中的INDEX,PRIMARY,UNIQUE,FULLTEXT之间的区别?


小智 26

主键:唯一标识它不能为空的每一行.它不能重复.

外键: 创建两个表之间的关系.可以为null.可以是重复的  


Gra*_*ton 7

以下是一些参考资料:

主键和外键约束.

主键:主键是唯一标识表中记录的字段或字段组合,因此可以放置单个记录而不会产生混淆.

外键:外键(有时称为引用键)是用于将两个表链接在一起的键.通常,您从一个表中获取主键字段并将其插入到另一个表中,在该表中它变为外键(它仍然是原始表中的主键).

另一方面,索引是一个可以应用于某些列的属性,以便可以加快在这些列上完成的数据检索.