主键(PRIMARY KEY)用于唯一标识表中的每一条记录。可以定义表中的一列或多列为主键,主键列上没有任何两行具有相同的值(即重复值),该列也不能为空值。为了有效实现数据的管理,每张表都应该有自己的主键,且只能有一个主键。
1.使用Transact-SQL语句创建主键约束
创建主键约束的语法格式如下:
[ CONSTRAINT constraint_name ] PRIMARY KEY [ CLUSTERED | NONCLUSTERED ]
( col_name [,…n])
其中:
CLUSTERED | NONCLUSTERED:用来指出是否为PRIMARY KEY约束创建聚集索引或非聚集索引,默认为聚集索引。索引将在第5章中详细介绍。
【例3.27】 创建Orders表,包括OrderID、CustomerID、SaleID和OrderDate 4个字段,其中OrderID字段设为主键。
CREATE TABLE Orders ( OrderID int CONSTRAINT pk_orderid PRIMARY KEY CLUSTERED, CustomerID char(3), SaleID char(3), OrderDate datetime )
该例在OrderID字段上创建主键约束,约束名为pk_orderid,并在该表上创建聚集索引。还可以在定义完所有列之后指定主键,并指定主键约束名称。
CREATE TABLE Orders ( OrderID int, CustomerID char(3), SaleID char(3), OrderDate datetime, CONSTRAINT pk_orderid PRIMARY KEY CLUSTERED (OrderID) )
创建主键约束时,还可以缺省约束名称。即创建Orders表的Transact-SQL语句还可以写成如下形式:
CREATE TABLE Orders ( OrderID int PRIMARY KEY, CustomerID char(3), SaleID char(3), OrderDate datetime )
这时没有提供主键约束的名称,SQL Server自动为该约束提供一个名称。
【例3.28】 已有Seller表,包含SaleID、SaleName、Sex等字段,将该表中的SaleID字段设为主键。
ALTER TABLE Seller
ADD CONSTRAINT pk_saleid PRIMARY KEY(SaleID)
注意 即使在创建主键约束时带有WITH NOCHECK选项,系统也总要对现有数据进行检查,若现有数据在该列上出现重复值或空值,SQL Server会提示错误信息,并拒绝执行创建主键约束操作。例如,Product表中的数据如图3-38所示。
Product表中包含两条记录的ProductID字段的值一样,都是p01001。通过如下语句给Product表设置主键时,系统会报错,如图3-39所示,只有修改Product表中已有数据,使每一条记录的ProductID的值各不相同,并且不为NULL,才可正确执行该语句。
ALTER TABLE Product
WITH NOCHECK
ADD CONSTRAINT pk_productid PRIMARY KEY(ProductID)
【例3.29】 OrderDetail表包含OrderID、ProductID和Quantity 3个字段,表中已有数据,如图3-40所示。为该表添加主键约束。
该表较为特殊,因为一张订单中可以订购多样产品,多张订单可以订购同一样产品,因此在OrderDetail表中每一条记录的OrderID值不唯一,ProductID值也不唯一。因此,单独用OrderID字段或ProductID字段做主键都不合适,这就需要用OrderID和ProductID的组合值做为主键。
ALTER TABLE OrderDetail
ADD CONSTRAINT pk_order_product PRIMARY KEY(orderID,productID)
主键约束定义在不止一列上时,一列中的值可以重复,但主键约束定义中所有列的组合值必须唯一。
【例3.30】 删除Seller表中创建的名为pk_saleid的主键约束。
ALTER TABLE Seller
DROP CONSTRAINT pk_saleid
2.使用SQL Server Management Studio创建主键约束
在SQL Server Management Studio中也可创建、修改、删除主键约束。
【例3.31】 使用SQL Server Management Studio为Category表添加主键约束。
具体操作步骤如下:
1)在SQL Server Management Studio的“对象资源管理器”中,选中需要添加主键约束的表Category,单击鼠标右键,在弹出的快捷菜单中选择“设计”命令,弹出“表设计器”窗口。
2)右键单击要设置为主键的字段CategoryID(如需设置多个字段为主键,则需先选中这些要设为主键的字段),在弹出的快捷菜单中选择“设置主键”命令,如图3-41所示。
这时主键列的左边显示“黄色钥匙”图标,如图3-42所示。
3)单击工具栏上的“保存”按钮,完成主键的设置。
4)如果需要取消主键的设置,在已设为主键的字段上单击鼠标右键,在弹出的快捷菜单中选择“删除主键”命令,即可取消主键的设置。