创建主键
适用于:SQL Server 2016 (13.x) 及更高版本
可以使用 SQL Server Management Studio 或 Transact-SQL 在 SQL Server 中定义主键。 创建主键会自动创建相应的唯一群集索引、聚集索引或非聚集索引(如果这样指定)。
一个表只能包含一个 PRIMARY KEY 约束。
在 PRIMARY KEY 约束中定义的所有列都必须定义为 NOT NULL。 如果没有指定为 Null 性,则加入 PRIMARY KEY 约束的所有列的为 Null 性都将设置为 NOT NULL。
使用主键创建新表需要在数据库中具有 CREATE TABLE 权限,并对在其中创建表的架构具有 ALTER 权限。
在某一现有表中创建主键需要对该表具有 ALTER 权限。
- 在“对象资源管理器”中,右键单击要向其添加唯一约束的表,然后选择“设计”。
- 在“表Designer”中,选择要定义为主键的数据库列的行选择器。 如果要选择多个列,请在为其他列选择行时按住 Ctrl 键。
- 右键单击该列的行选择器,然后选择“设置主键”。
注意
若要重新定义主键,则必须首先删除与现有主键之间的任何关系,然后才能创建新主键。 此时,将显示一条消息警告您:作为该过程的一部分,将自动删除现有关系。
主键列由其行选择器中的主键符号标识。
如果主键由多个列组成,则其中一个列将允许重复值,但是主键中所有列的值的各种组合必须是唯一的。
如果定义复合键,则主键中列的顺序将与表中显示的列顺序相匹配。 不过,您可以在创建主键之后更改列的顺序。 有关详细信息,请参阅 修改主键。
下面的示例对 AdventureWorks 数据库中的 TransactionID 列创建主键。
SQL
ALTER TABLE Production.TransactionHistoryArchive
ADD CONSTRAINT PK_TransactionHistoryArchive_TransactionID PRIMARY KEY CLUSTERED (TransactionID);
下面的示例创建一个表,并对 AdventureWorks 数据库中的 TransactionID 列定义主键。
SQL
CREATE TABLE Production.TransactionHistoryArchive1
(
TransactionID int IDENTITY (1,1) NOT NULL
, CONSTRAINT PK_TransactionHistoryArchive1_TransactionID PRIMARY KEY CLUSTERED (TransactionID)
)
;
下面的示例创建一个表,并对 AdventureWorks 数据库中的 CustomerID 列和 TransactionID 分别定义主键和聚集索引。
SQL
-- Create table to add the clustered index
CREATE TABLE Production.TransactionHistoryArchive1
(
CustomerID uniqueidentifier DEFAULT NEWSEQUENTIALID()
, TransactionID int IDENTITY (1,1) NOT NULL
, CONSTRAINT PK_TransactionHistoryArchive1_CustomerID PRIMARY KEY NONCLUSTERED (CustomerID)
)
;
-- Now add the clustered index
CREATE CLUSTERED INDEX CIX_TransactionID ON Production.TransactionHistoryArchive1 (TransactionID);「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




