我使用的是MySQL数据库。

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


当前回答

主键和唯一键的区别

主键和唯一键用于唯一地定义表中的一行。 主键创建列的聚集索引,而唯一键创建列的非聚集索引。

主键不允许空值,但唯一键允许一个空值。

其他回答

主键是唯一的键。

每个表最多只能有一个主键,但可以有多个唯一键。主键用于唯一地标识表行。主键不能为NULL,因为NULL不是一个值。

对于一个组织或企业来说,有许多物理实体(如人员、资源、机器等)和虚拟实体(它们的任务、事务、活动)。 通常,业务需要记录和处理这些业务实体的信息。 这些业务实体在整个业务域中由一个Key标识。

根据RDBMS的预期,密钥(又名候选密钥)是唯一标识一个实体的一个值或一组值。

对于一个DB-Table,有很多存在的键,并且可能符合主键的条件。 因此,所有键、主键、唯一键等统称为候选键。 但是,DBA从候选密钥中选择一个用于搜索记录的密钥称为主密钥。

主键和唯一键的区别

1. 行为:主键用于标识表中的一行(记录),而唯一键用于防止列中的重复值(空项除外)。

2. 索引:默认情况下,sql引擎在主键上创建聚集索引(如果不存在),在唯一键上创建非聚集索引。

3.可空性:主键不包括空值,而唯一键可以。

4. 存在:一个表最多只能有一个主键,但可以有多个唯一键。

5. 可修改性:您不能更改或删除主值,但唯一键值可以。

更多信息和示例:

http://dotnetauthorities.blogspot.in/2013/11/Microsoft-SQL-Server-Training-Online-Learning-Classes-Integrity-Constraints-PrimaryKey-Unique-Key_27.html

主键

主键的主要目的是提供一种方法来标识表中的每条记录。

主键提供了一种使用行中的数据标识行的方法。主键可以基于一个或多个列,比如名字和姓氏;但是,在许多设计中,主键是从标识列自动生成的数字。

主键有以下特征:

一个表只能有一个主键。 主键由一个或多个列组成。 主键强制表的实体完整性。 所有定义的列必须定义为NOT NULL。 主键唯一地标识一行。 默认情况下,主键会导致聚集唯一索引。

独特的钥匙

唯一键也称为唯一约束。可以使用唯一约束来确保数据库中的行是唯一的。

我们不是已经对主键做过了吗?是的,我们这样做,但一个表可能有几组列,你想要唯一的。

在SQL Server中,唯一密钥具有以下特征:

一个表上可以定义多个唯一键。 默认情况下,唯一键会导致非聚集的唯一索引。 一个或多个列组成一个唯一键。 列可以为NULL,但允许每个列上有一个NULL。 外键约束可以引用唯一的约束。

来源:这里

Primary Key Unique Key
A primary key can't accept NULL values Unique key can accept NULL values, so problematic in the context of being unique
A primary key cannot contain duplicate values A unique key also cannot contain duplicate values
We can have only one primary key in a table We can have more than one unique key in a table
We can make a primary key from one or more table fields We can also make a unique key from one or more table fields
By default, a primary key creates a clustered index By default, a unique key creates a non-clustered unique index
It is used to identify each record in the table It prevents storing duplicate entries in a column

主键的主要特征是:

它必须为每一行数据包含一个惟一的值。 不能包含空值。 一个表中只能有一个主键。

唯一键的主要特征是:

它还可以为每一行数据包含一个惟一的值。

它也可以包含空值。

一个表中有多个唯一键。