sql server 中唯一主键和复合主键之间的区别

问题描述 投票:0回答:5

我想知道SQL Server中唯一键和复合主键有什么区别。

根据w3c学校:

UNIQUE 约束唯一标识数据库表中的每条记录。

UNIQUE 和 PRIMARY KEY 约束都为一列或一组列的唯一性提供保证。

PRIMARY KEY 约束自动定义了一个 UNIQUE 约束。

请注意,每个表可以有多个 UNIQUE 约束,但每个表只能有一个 PRIMARY KEY 约束。

我们可以使用以下方法创建复合主键:

CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
UNIQUE (P_Id)
)

对于复合主键语法:

CREATE TABLE Persons
(
P_Id int,
C_Id int,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
Primary Key (P_Id,C_Id)
);
sql sql-server primary-key unique-constraint
5个回答
7
投票

UNIQUE 约束唯一标识数据库表中的每条记录。这为一列或一组列的唯一性提供了保证。我们可以用它定义(指向)一行。

主键默认具有唯一约束。

而在某些表中,不会有任何具有唯一值的列来定义行。在这种情况下,使用复合键。在这种情况下,两个或多个列组合在一起,使得该组合是唯一的。


0
投票

正如您自己所说,唯一键和主键之间的唯一区别是表上可能只有 1 个主键,而它可以有更多唯一键。
此外,主键的值不能为空。
唯一键和主键都可以由多列组成(组合键)。

顺便说一句,在您的示例中,您在 P_Id 列上有一个唯一键,并且有一个包含该同一列的组合主键。
这没有任何意义。
我建议在 P_Id 列上仅创建一个简单的主键。


0
投票

复合键由多个列组成

主键防止该表上的第二行具有相同的键列值。

主键可以由单列组成,也可以由多列组成。所以主键也可以定义为复合键。


0
投票

主键不接受任何重复值和NULL值。 一个表的主键可以被另一表的外键引用。与主键不同,一张表可以有多个唯一键。 唯一键约束只能接受列的一个 NULL 值。唯一约束也由另一个表的外键引用。 复合键具有两个或多个属性,它们一起可以唯一地标识表中的元组。这样的键也称为复合键,其中创建键的每个属性本身就是一个外键。


0
投票

复合键 - 将多个列组合为单个主键,以保持其集体唯一性,当组合列时,这些列看起来是唯一的,但单独来看它是非唯一的(例如,在一所学校中,我们有 n 个名为 Ram 的学生,但只有一个Ram 具有出生日期、父母姓名和其他约束)这可以通过使用复合密钥来完成。

唯一键 - 另一方面维护单/多列唯一。

主键 - 表的单个唯一主键。

注意:每列中可以有重复的值,但作为一个整体,它必须是UNIQUE

© www.soinside.com 2019 - 2024. All rights reserved.