sql创建主键约束(转)

本文介绍如何使用企业管理器和SQL语句在数据库表中创建主键约束,包括设置步骤及注意事项。
创建主键约束
在数据表中经常有一个列或多列的组合,其值能惟一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可强制表的实体完整性。当创建或更改表时可通过定义PRIMARY KEY约束来创建主键。
1.使用企业管理器创建主键约束
操作步骤如下:
(1)打开企业管理器,选择“控制台根目录”→“SQL Server组”→“MRFC”→“数据库”节点。
(2)在“销售管理系统”中选择“表”,并在右边的详细列表中选择要创建约束的数据表,单击鼠标右键选择“设计表”命令,如图1所示。

图1  选择“设计表”命令
(3)在弹出的窗口中选择要设置为主键的列,可以通过快捷工具栏中的 按钮进行单一设定,还可以将列选择多个,并通过单击鼠标右键选择“设置主键”命令将多个列设置为主键,如图2所示。

图2  将多个列设置为主键
(4)设置完成后,单击快键工具栏中的 按钮保存主键设置,并关闭此窗口。
注意:将某列设置为主键时,不可以将此列设置为允许空,否则将弹出如图3所示的信息框。

图3  主键设置错误提示对话框
2.使用SQL语句创建主键约束
使用SQL语句创建主键约束可以在创建表(Create Table)或修改表(Alter Table)时进行  创建。
在修改表中创建主键约束语法:
ALTER TABLE table_name
ADD
CONSTRAINT constraint_name
PRIMARY KEY [CLUSTERED | NONCLUSTERED]
{(Column[,…n])}
参数说明:
 CONSTRAINT:创建约束的关键字。
 constraint_name:创建约束的名称。
 PRIMARY KEY:表示所创建约束的类型为主键约束。
 CLUSTERED | NONCLUSTERED:是表示为PRIMARY KEY或UNIQUE约束创建聚集或非聚集索引的关键字。PRIMARY KEY约束默认为CLUSTERED,UNIQUE约束默认为 NONCLUSTERED。
下面在指定的数据库中创建一个名为mytable的数据表,并在该数据表中将“userid”列设置为主键。
操作步骤:
(1)在操作系统中选择“开始”→“所有程序”→“Microsoft SQL Server”→“查询分析器”命令,打开查询分析器。
(2)在查询分析器的工具栏中选择要连接的数据库。
(3)在代码编辑区中编写如下代码。
SQL语句如下:
USE 销售管理系统    --引入数据库
GO
CREATE TABLE mytable    --创建表
(
USERID int CONSTRAINT pk_id PRIMARY KEY,    --创建主键约束
USERNAME char (20),    --数据列
USERPASS char (20),    --数据列
USERPHONE char (20),    --数据列
USERADDRESS varchar (50),    --数据列
USERLEVEL char(2)    --数据列
)
GO
说明:在上段代码中,CONSTRAINT pk_id PRIMARY KEY为创建一个主键约束,pk_id为用户自定义的主键约束名称,但名称必须是合法的标识符。
下面在mytable表中将USERLEVEL(用户级别)列设定为主键约束。
SQL语句如下:
USE 销售管理系统    --引入数据库
GO
ALTER TABLE mytable     --修改表
ADD     /*将USERLEVEL列设置为主键约束*/
CONSTRAINT pk_level
PRIMARY KEY CLUSTERED (USERLEVEL)
GO
说明:将某个数据列设置为主键约束时,该数据列不能为允许空,否则将会无法创建主键约束。
可以在查询分析器中写入如下代码将数据列设置为不允许空。
ALTER TABLE mytable     --修改表
ALTER Column USERLEVEL char (2) NOT NUL --将USERLEVEL数据列设置为不允许空
<think>好的,我现在需要帮助用户了解SQL Server 2005中主键约束的使用方法和示例。首先,我要回忆一下主键约束的基本概念。主键用于唯一标识表中的每一行,通常一个表只能有一个主键,可以由一列或多列组成。根据用户提供的引用资料,比如引用[4]提到主键可以是列约束或表约束,这需要详细说明。 接下来,用户可能需要具体的操作步骤,比如如何创建、修改或删除主键约束。根据引用[2]和[3],删除主键需要使用ALTER TABLE和DROP CONSTRAINT,而创建则可能分为建表时添加或后期修改。我需要确保语法正确,特别是SQL Server 2005的版本是否支持这些语句,不过通常这些基本语法在2005中是适用的。 用户可能需要示例,所以我要准备创建表时添加主键的例子,以及通过ALTER TABLE添加的示例。比如,在创建表的时候,可以定义列级主键或者表级主键。例如,列级的话直接在字段后面加PRIMARY KEY,而表级则在最后指定。同时,如果用户需要复合主键,也就是多列组合,这时候必须用表级约束。 删除主键的步骤也很重要,需要先知道约束的名称。引用[3]提到可能需要查询系统视图来获取约束名,比如使用sp_help或者直接查询sys.key_constraints。这部分需要详细说明,因为用户可能不知道如何查找约束名,直接给出查询语句会比较有帮助。 另外,用户可能遇到的问题,比如主键冲突如何处理,或者修改现有主键。根据引用[2],修改主键需要先删除再添加,所以要给出相应的例子,比如先删除现有的约束,再添加新的主键。 还要注意主键的其他特性,比如自增列的使用,这在SQL Server中是IDENTITY属性。例如,创建自增主键的示例,这在用户插入数据时不需要指定该列的值,系统会自动生成。 最后,总结主键的作用和注意事项,比如唯一性、非空等,确保用户理解主键的重要性。同时,生成相关问题,帮助用户进一步学习,比如如何查看所有主键约束、处理重复值错误、复合主键的使用等。</think>### SQL Server 2005 主键约束使用方法及示例 #### 1. 创建主键约束 主键约束用于唯一标识表中的每一行,可通过以下两种方式定义: **1.1 建表时定义单列主键** ```sql CREATE TABLE Employees ( EmployeeID INT PRIMARY KEY, Name VARCHAR(50), Department VARCHAR(20) ); ``` 此示例将$EmployeeID$列作为主键[^4]。 **1.2 建表时定义复合主键** ```sql CREATE TABLE OrderDetails ( OrderID INT, ProductID INT, Quantity INT, PRIMARY KEY (OrderID, ProductID) ); ``` 复合主键由$OrderID$和$ProductID$两列共同构成。 **1.3 通过修改表添加主键** ```sql ALTER TABLE Students ADD CONSTRAINT PK_StudentID PRIMARY KEY (StudentID); ``` 此操作为已存在的$Students$表添加名为$PK_StudentID$的主键约束[^2]。 --- #### 2. 删除主键约束 需先获取约束名称,再执行删除操作: ```sql -- 查询主键约束名称 SELECT name FROM sys.key_constraints WHERE type = 'PK' AND parent_object_id = OBJECT_ID('Employees'); -- 删除主键约束 ALTER TABLE Employees DROP CONSTRAINT PK__Employee__7AD04FF114B2C18A; ``` 通过系统视图$sys.key_constraints$可获取主键名称[^3]。 --- #### 3. 主键自增列示例 ```sql CREATE TABLE Products ( ProductID INT IDENTITY(1,1) PRIMARY KEY, ProductName VARCHAR(100) NOT NULL ); ``` $IDENTITY(1,1)$表示从1开始自动递增,每次增加1。 --- #### 4. 主键冲突处理 尝试插入重复主键值时,系统会报错: ```sql Msg 2627, Level 14, State 1, Line 1 Violation of PRIMARY KEY constraint 'PK__Employees'. Cannot insert duplicate key in object 'dbo.Employees'. ``` --- ### 主键约束特性总结 | 特性 | 说明 | |--------------|-------------------------------| | 唯一性 | 主键值不可重复 | | 非空 | 主键列不允许NULL值 | | 索引自动创建 | 默认生成聚集索引(可修改) | | 复合主键 | 多列组合唯一标识记录 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值