我使用的是MySQL数据库。
在哪些情况下我应该创建唯一键或主键?
我使用的是MySQL数据库。
在哪些情况下我应该创建唯一键或主键?
当前回答
我知道这个问题已经有好几年了,但我想提供一个答案,解释为什么而不是如何
主键的作用:在数据库中唯一地标识一行=>一行表示表建模的实体类型的单个实例。主键强制实体的完整性,即实体完整性。主键将是一个聚集索引,即它定义了数据在表中物理存储的顺序。
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.
好了!
其他回答
主键必须唯一。
唯一键不一定是主键-请参阅候选键。
也就是说,一个表上可能有多个列的组合可以唯一地标识一行——其中只有一个可以被选择为主键。其他键虽然是唯一的,但都是候选键。
如果你的数据库设计不需要外键,那么你可以使用唯一键(但记住唯一键允许单个空值)。
如果数据库需要外键那么你别无选择只能用主键。
要查看唯一键和主键之间的区别,请访问这里
简单的主键是唯一的,不能为空,唯一的可以为空,也可以不是唯一的。
主键
主键的主要目的是提供一种方法来标识表中的每条记录。
主键提供了一种使用行中的数据标识行的方法。主键可以基于一个或多个列,比如名字和姓氏;但是,在许多设计中,主键是从标识列自动生成的数字。
主键有以下特征:
一个表只能有一个主键。 主键由一个或多个列组成。 主键强制表的实体完整性。 所有定义的列必须定义为NOT NULL。 主键唯一地标识一行。 默认情况下,主键会导致聚集唯一索引。
独特的钥匙
唯一键也称为唯一约束。可以使用唯一约束来确保数据库中的行是唯一的。
我们不是已经对主键做过了吗?是的,我们这样做,但一个表可能有几组列,你想要唯一的。
在SQL Server中,唯一密钥具有以下特征:
一个表上可以定义多个唯一键。 默认情况下,唯一键会导致非聚集的唯一索引。 一个或多个列组成一个唯一键。 列可以为NULL,但允许每个列上有一个NULL。 外键约束可以引用唯一的约束。
来源:这里
主键的主要特征是:
它必须为每一行数据包含一个惟一的值。 不能包含空值。 一个表中只能有一个主键。
唯一键的主要特征是:
它还可以为每一行数据包含一个惟一的值。
它也可以包含空值。
一个表中有多个唯一键。