我使用的是MySQL数据库。

在哪些情况下我应该创建唯一键或主键?


当前回答

主键必须唯一。

唯一键不一定是主键-请参阅候选键。

也就是说,一个表上可能有多个列的组合可以唯一地标识一行——其中只有一个可以被选择为主键。其他键虽然是唯一的,但都是候选键。

其他回答

主键:

一个表中只能有一个主键约束 在一些DBMS中,它不能为NULL,例如MySQL添加了NOT NULL 主键是记录的唯一键标识符

独特的关键:

一个表中可以有多个唯一键吗 唯一键可以有NULL值 它可以是一个候选密钥 唯一键可以为NULL;多行可以有NULL值,因此可能不被认为是“唯一的”

主键具有标识数据库行的语义。因此,一个给定的表只能有一个主键,而可以有许多唯一键。

同样的原因,主键不能为NULL(至少在Oracle中,其他数据库就不确定了)

因为它标识了行,所以它永远不应该更改。改变主键一定会造成严重的痛苦,甚至可能是永恒的诅咒。

因此,在大多数情况下,你需要一些人为的id作为主键,它只用于标识表中的单行。

另一方面,唯一键可以随心所欲地更改。

唯一键(英国):它是一列或一组列,可以识别一行中的唯一性。

主键(PK):它也是一列或一组列,可以识别一行中的唯一性。

因此,主键只是唯一键的另一个名称,但SQL Server中的默认实现对主键和唯一键是不同的。

默认情况下:

PK创建聚集索引,UK创建非聚集索引。 PK不为空,但是UK允许为空(注意:默认情况下) 一张桌子上只能有一个且只有一个PK,但可以有多个UK 您可以根据需要重写默认实现。

这取决于你在决定是创造UK还是PK时的目标是什么 “如果有三个人的团队,那么他们都是同行,但其中会有一个人是一对同行:PK和UK有类似的关系。”我建议阅读这篇文章:作者给出的例子可能看起来不太合适,但试着得到一个整体的想法。

http://tsqltips.blogspot.com/2012/06/difference-between-unique-key-and.html

Think the table name is employe. Primary key Primary key can not accept null values. primary key enforces uniqueness of a column. We can have only one Primary key in a table. Unique key Unique key can accept null values. unique key also enforces uniqueness of a column.you can think if unique key contains null values then why it can be unique ? yes, though it can accept null values it enforces uniqueness of a column. just have a look on the picture.here Emp_ID is primary and Citizen ID is unique. Hope you understand. We can use multiple unique key in a table.

简单的主键是唯一的,不能为空,唯一的可以为空,也可以不是唯一的。