我想知道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)
);
UNIQUE 约束唯一标识数据库表中的每条记录。这为一列或一组列的唯一性提供了保证。我们可以用它定义(指向)一行。
主键默认具有唯一约束。
而在某些表中,不会有任何具有唯一值的列来定义行。在这种情况下,使用复合键。在这种情况下,两个或多个列组合在一起,使得该组合是唯一的。
正如您自己所说,唯一键和主键之间的唯一区别是表上可能只有 1 个主键,而它可以有更多唯一键。
此外,主键的值不能为空。
唯一键和主键都可以由多列组成(组合键)。
顺便说一句,在您的示例中,您在 P_Id 列上有一个唯一键,并且有一个包含该同一列的组合主键。
这没有任何意义。
我建议在 P_Id 列上仅创建一个简单的主键。
复合键由多个列组成
主键防止该表上的第二行具有相同的键列值。
主键可以由单列组成,也可以由多列组成。所以主键也可以定义为复合键。
主键不接受任何重复值和NULL值。 一个表的主键可以被另一表的外键引用。与主键不同,一张表可以有多个唯一键。 唯一键约束只能接受列的一个 NULL 值。唯一约束也由另一个表的外键引用。 复合键具有两个或多个属性,它们一起可以唯一地标识表中的元组。这样的键也称为复合键,其中创建键的每个属性本身就是一个外键。
复合键 - 将多个列组合为单个主键,以保持其集体唯一性,当组合列时,这些列看起来是唯一的,但单独来看它是非唯一的(例如,在一所学校中,我们有 n 个名为 Ram 的学生,但只有一个Ram 具有出生日期、父母姓名和其他约束)这可以通过使用复合密钥来完成。
唯一键 - 另一方面维护单/多列唯一。
主键 - 表的单个唯一主键。
注意:每列中可以有重复的值,但作为一个整体,它必须是UNIQUE