我使用的是MySQL数据库。
在哪些情况下我应该创建唯一键或主键?
我使用的是MySQL数据库。
在哪些情况下我应该创建唯一键或主键?
当前回答
对于一个组织或企业来说,有许多物理实体(如人员、资源、机器等)和虚拟实体(它们的任务、事务、活动)。 通常,业务需要记录和处理这些业务实体的信息。 这些业务实体在整个业务域中由一个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
其他回答
我知道这个问题已经有好几年了,但我想提供一个答案,解释为什么而不是如何
主键的作用:在数据库中唯一地标识一行=>一行表示表建模的实体类型的单个实例。主键强制实体的完整性,即实体完整性。主键将是一个聚集索引,即它定义了数据在表中物理存储的顺序。
Purpose of Unique Key: Ok, with the Primary Key we have a way to uniquely identify a row. But I have a business need such that, another column/a set of columns should have unique values. Well, technically, given that this column(s) is unique, it can be a candidate to enforce entity integrity. But for all we know, this column can contain data originating from an external organization that I may have a doubt about being unique. I may not trust it to provide entity integrity. I just make it a unique key to fulfill my business requirement.
好了!
如果你的数据库设计不需要外键,那么你可以使用唯一键(但记住唯一键允许单个空值)。
如果数据库需要外键那么你别无选择只能用主键。
要查看唯一键和主键之间的区别,请访问这里
主键的主要特征是:
它必须为每一行数据包含一个惟一的值。 不能包含空值。 一个表中只能有一个主键。
唯一键的主要特征是:
它还可以为每一行数据包含一个惟一的值。
它也可以包含空值。
一个表中有多个唯一键。
主键是唯一的键。
每个表最多只能有一个主键,但可以有多个唯一键。主键用于唯一地标识表行。主键不能为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 |