约束语法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SQL Server 2000支持下列五类约束:(1)DEFAULT约束(默认约束):当向数据库表中插入数据时,如果没有明确的提供输入值时,SQL S自动为该列输入指定值。(2)CHECK约束(检查约束):通过逻辑表达式判断限制插入到列中的值。(3)PRIMARY KEY约束(主键约束):不允许数据库表在指定列上具有相
同的值,且不允许有空值。(4)FOREIGN KEY约束(外键约束):定义数据库
表中指定列上插入或更新的数值必须在另一张被参照表中的特定列上存在。(5)UNIQUE约束(惟一约束):不允许数据库表在指定列上具有相同的值,但允许
有空值。约束也被分为列约束和表约束两类。列约束是指只对某一列起作用的约束。当一个约束中包含了数据库表中一个以上的列时,称为表约束。
24、约束的创建约束可以通过使用CREATE TABLE命令创建。具体语法如下: CREATE TABLE table_name (column_name data_type (NULL | NOT NULL)[[CONSTRAINT constraint_name]{PRIMARY KEY [CLUSTERED | NONCLUSTERED] | UNIQUE [CLUSTERED | NONCLUSTERED] | [FOREIGN KEY] REFERENCES ref_table [(ref_column)] | DEFAULT constant_expression | CHECK(logical_expression)}][,...]) 其中,各参数的意义
为: table_name:创建约束的表名称 column_name:创建约束的列的名
称 data_type:所在列的数据类型 constraint_name:新建约束的名称
[例题37] 在tsinghua数据库中创建一张用于教师信息管理的表teachers,表中包括的教师信息分别为:教师编号、教师姓名、性别、出身年月、所在系代号、职称、办公室电话号码、科研方向以及工作状态,在创建时定义有列约束和表约束。具体命令如下: use tsinghua CREATE TABLE
tsinghua.dbo.teachers (TeacherID int NOT NULL, name nvarchar(5) NOT NULL, gender nchar(1) NULL, birthday datetime
NULL, DeptCode tinyint NOT NULL, Title nvarchar(5)
NULL, TelCode char(8) NOT NULL, aspect nvarchar(200)
NULL, status nvarchar(5) NOT NULL CONSTRAINT DF_Status DEFAULT('
在职'), CONSTRAINT PK_Teacher PRIMARY KEY
CLUSTERED(TeacherID), CONSTRAINT FK_DeptCode FOREIGN KEY (DeptCode) REFERENCES dbo.departments(DeptCode), CONSTRAINT CK_TelCode CHECK(TelCode LIKE
'627[0-9][0-9][0-9][0-9][0-9]'),) go 在这个例子中,用户可以看到我们使用的约束类型依次为非空约束、默认约束、主键约束、外键约束和检查约束。在结果显示窗口中可以看到错误提示:
服务器: 消息 1767,级别 16,状态 1,行 2 外键 'FK_DeptCode' 引用了无效的表 'dbo.departments'。服务器: 消息 1750,级别 16,状态 1,行 2 未能创建约束。请参阅前面的错误信息。
这是由于还没有在数据库tsinghua中创建外键约束FK_DeptCode所需表departments,用户可以通过下面指令先创建表departments: CREATE TABLE tsinghua.dbo.departments (DeptCode tinyint NOT NULL Primary
Key, DeptName nchar(20) NOT NULL, TelCode char(8) NULL) go
25、查看约束的定义信息在CREATE TABLE语句中使用CONSTRAINT定义完整约束时,其约束命名必须在数据库中保持惟一,此外还应遵从SQL Server的标志符规则。约束在创建后SQL Server将指导约束的名称保存在系统表sysobjects中,并把创建的文本代码保存在系统表syscomments中。SQL Server 为用户提供了多种查看约束信息的方法。(1)使用系统存储过程用户可以通过使用系统存储过程sp_help,sp_helptext,sp_helpconstraint来查看约束的相关信息。具体命令的语法如下: EXEC sp_help
(sp_helptext,sp_helpconstraint) 其中:sonstraint_name为需要查看的约束的名称。
[例题38] 使用系统存储过程sp_helptext查看表teachers上约束
CK_TelCode的定义文本信息。具体命令如下: use tsinghua EXEC sp_helptext CK_TelCode go(2)使用规划视图用户还可以通过查询系统规划视图
check_constraints,referential_constraints,table_constraints得到约束
的相关信息。
[例题39] 使用系统规划视图check_constraints查看数据库tsinghua上存在的所有约束的相关信息。具体命令如下: use pubs SELECT * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS go (3)使用“企业管理器”
26、删除约束要删除定义在表上的各种约束,可以通过企业管理器或者利用系统函数实现。(1)利用“企业管理器”删除约束(2)利用系统函数drop删除约束对于具有名称的完整性约束,利用系统函数drop也可以方便地实现约束的删除。其具体的命令如下: ALTER TABLE table_name DROP CONSTRAINT constraint_name
其中: table_name:需要删除约束的表的名称 constraint_name:需要删除的约束的名称
[例题40] 使用系统函数删除表teachers上定义的DF_status约束。具体命令如下: use tsinghua ALTER TABLE teachers DROP CONSTRAINT DF_status go
用户不可以通过系统存储过程对约束的删除进行确认。在查询窗口运行如下命令: EXEC sp_helpconstraint DF_status 返回信息告知: 服务器: 消息 15009,级别 16,状态 1,过程 sp_helpconstraint,行 46 对象 'DF_status' 在数据库 'tsinghua' 中不存在。
27、DEFAULT约束 DEFAULT约束(默认约束)强制了数据的域完整性。通过使用DEFAULT约束可以实现当用户在向数据库表中插入数据时,如果没有明确给出定义有DEFAULT约束列的输入值时,由SQL Server自动为该列输入默认值。定义DEFAULT约束可以在创建表时利用CREATE TABLE命令完成(关于在创建表