配色: 字号:
《SQL Server数据库应用开发技术》第6章 数据完整性实施
2023-05-25 | 阅:  转:  |  分享 
  
第6章 数据完整性实施 知识技能目标:1. 理解数据完整性概念。2. 掌握使用约束实施数据完整性的方法。3. 掌握使用规则实施数据完整
性的方法。4. 掌握使用默认值对象实施数据完整性的方。5. 掌握标识列的使用。 引导案例: 在教务管理数据库的表中输入数据时
,发现会有一些不正常情况,如对不同的学生输入了相同的学号,有的学生姓名没有输入,相同的数据行被存储多次,性别字段的值除了有男女之外
,还输入了其他非性别的无关数,学生班级为不存在的班级,选课表中输入了不存在的学号,选的课程是学校没有开过的课程等等。之所以会出现这
些混乱数据,是因为没有实现完整性设计。为了避免发生这些不正常状况,就需要实施数据完整性,实现第2章中的数据完整性设计。 第6章 数
据完整性实施 第6章 数据完整性实施 6.1 数据完整性实施方法 6.2 使用约束 6.3 使用默认 6.4 使用规则 6.5 使
用标识列 小结6.1 数据完整性实施方法 有两种方式可以实现数据完整性,即声明数据完整性和过程数据完整性。 1
.声明数据完整性 使用声明数据完整性就是通过在对象定义中来实现,即定义数据必须满足的条件作为对象定义的一部分。它包括
使用各种约束、默认和规则。 实现数据完整性的首选方法是使用声明完整性。 2.过程完整性 过程数
据完整性是通过在脚本语言中定义来实现的。当执行这些脚本时,就可以强制完整性的实现。过程数据完整性的方式包括使用触发器和存储过程。也
可以在客户机或服务器上使用其他的编程语言和工具实现。返回目录6.2 使用约束 约束是强制数据完整性的首选方法。应先确
定约束的类型,不同类型的约束强制不同类型的数据完整性。约束可以通过SQL Server Management Studio和T-S
QL语句实现,既可以在创建表时设置,也可以通过修改表添加约束。T-SQL语句实现约束的通用语法格式分为以下两种情况:列级约束语法格
式:列名 数据类型 [CONSTRAIN约束名] 约束类型列级约束直接在需要设置约束的列定义之后书写。返回目录6.2 使用约束
表级约束语法格式: [CONSTRAINT 约束名] 约束类型 表级约束在表的所有列定义之后书写。 在设置约束时
,约束名可以省略,系统会自动起一个约束名。但建议用户自己起名。 如果是表已存在,通过修改表的方式添加约束,通用格式为
: ALTER TABLE 表名 ADD [CONSTRAINT 约束名] 约束类型
约束类型包括空约束、主键约束、唯一键约束、检查约束、默认和外键约束。返回目录6.2 使用约束 利用T-S
QL命令修改约束,必须先删除约束,再重新创建或添加。删除约束的基本格式为: ALTER TABLE 表名
DROP [CONSTRAIN] 约束名[,…n]返回目录6.2 使用约束6.2.1 空约束(NULL)、非空约
束(NOT NULL) 在设计表时,表中某些列非常重要,如果不输入值则信息不完整,这样的列应设计为不允许为空。比
如学生表的学生学号、姓名。默认情况下,列允许空值。在数据库中 NULL 是特殊值,一个列中出现NULL值,意味着用户还没有为该列输
入值。NULL既不等价于数值型数据0,也不等价于字符型数据空串,只表明该列是未知的。在用插入命令插入数据时,要表示空数据,不能用引
号因住,如’NULL’这样表示。返回目录6.2 使用约束6.2.1 空约束(NULL)、非空约束(NOT NULL)1. 用SQL
Server Management Studio实现 【例6.1】设置学生表中字段学号、姓名、性别、入学时间不允许为空。1)
打开SQL Server Management Studio,在对象资源管理器中展开教务管理系统,展开“表”结点。2)选择“学生表
”,单击右键,选择“修改”进入表设计器进行表结构设计,如图6.1所示,分别将学号、姓名、性别、入学时间字段后的允许空复选框去掉对勾
。3)修改完毕后单击工具栏上的“保存”图标或选择菜单“ 文件”下的“保存”项,关闭窗口即可。返回目录6.2 使用约束6.2.1 空
约束(NULL)、非空约束(NOT NULL)图 6.1 设置空约束和非空约束返回目录6.2 使用约束6.2.1 空约束(NULL
)、非空约束(NOT NULL)如果表中某列原先设计为允许空,现要修改为不允许为空,则只有当现有列不存在空值时,才可以进行。否则返
回错误信息。如果学生表不存在,则选择“新建”表,进入表设计器进行设置。返回目录6.2 使用约束6.2.1 空约束(NULL)、非空
约束(NOT NULL)2. 用T-SQL命令实现 空约束或非空约束,只能设置列级约束。直接在列定义后书写NULL或NOT
NULL。 语法格式: 列定义 NULL | NOT NUL 例6.1 设置学生表中字段学号、姓名、性别、入学时间不允许为
空。返回目录6.2 使用约束6.2.1 空约束(NULL)、非空约束(NOT NULL)例6.1 (1)创建表设置CREATE T
ABLE dbo.学生表( 学号 char(11) NOT NULL,--不允许为空 姓名 nchar(5) NOT NU
LL, --不允许为空 性别 nchar(1) NOT NULL, --不允许为空 出生日期 datetime NULL,
政治面貌 varchar(10), 入学时间 datetime NOT NULL, --不允许为空 联系电话 c
har(20) NULL, 班级 char(5) NULL, 备注 varchar(200) N
ULL )返回目录6.2 使用约束6.2.1 空约束(NULL)、非空约束(NOT NULL)例6.1 (2)
修改表设置 ALTER TABLE 学生表 ALTER COLUMN 学号 CHAR(11) NOT NULL ALTER TAB
LE 学生表 ALTER COLUMN 姓名 NCHAR(5) NOT NULL ALTER TABLE 学生表 ALTER CO
LUMN 性别 NCHAR(1) NOT NULL ALTER TABLE 学生表 ALTER COLUMN 入学时间 DATET
IME NOT NULL 执行下列插入数据进行验证效果。 INSERT INTO学生表(学号,姓名) VALUES (''20070
101110'',''张致'') 返回目录6.2 使用约束6.2.2 主键约束(PRIMARY KEY) 在插入数据时,要
保证数据不出现重复行,至少要有一列是唯一的,如果这个列是能唯一地标识表中的行信息的,或者某个表要引用这个列,则将该列设置主键约束。
一个表都应有一个主键,且只能有一个主键约束。设置为主键的列系统自动设置其不允许为空。如果已有主键约束,要改变新列为主键,则必须先删
除现有的主键约束,然后再创建新的主键。但是当主键约束由另一表的外键约束引用时,不能删除主键约束,要删除它,必须先删除外键约束。主键
可以是一列,也可以是多列组合成的复合主键。 image、text数据类型的字段不能设置为主键。返回目录6.2 使用约束6.2.2
主键约束(PRIMARY KEY)1.用SQL Server Management Studio实现【例6.2】设置学生表学号字
段为主键。 1)打开SQL Server Management Studio,在对象资源管理器中展开教务管理系统,展开“表”结点。
2)选择“学生表”,单击右键,选择“修改”进入表设计器进行表结构设计,选择“学号”列。 3)单击工具栏上按钮“设置主键”,或者单
击右键,从快捷菜单选择“设置主键” 如图6.2所示,小钥匙将出现在学号旁边指示栏上。“设置主键”是奇偶键,设置主键后变为“移除
主键”,选择它可以取消主键。如果要设置复合主键时,利用SHIFT或CTRL键控制选中要设置的字段。返回目录6.2 使用约束6.2.
2 主键约束(PRIMARY KEY)图 6.2 设置主键返回目录6.2 使用约束6.2.2 主键约束(PRIMARY KEY)
4)修改完毕后单击工具栏上的“保存”图标或选择菜单“ 文件”下的“保存”项,关闭窗口即可。 当向表中的现有列添加 PRIMAR
Y KEY 约束时,表中现有的数据必须没有空值,也没有重复值,否则就违反了惟一性约束,系统将返回错误信息。如果列是允许为空的,必须
修改为不允许为空,才能设置为主键。返回目录6.2 使用约束6.2.2 主键约束(PRIMARY KEY)2. 用T-SQL命令实现
语法格式: [CONSTRAINT 约束名] PRIMARY KEY [CL
USTERED | NONCLUSTERED] [(列名1[,…n])] 说明:CLUSTERED和 NONCLUSTERED
分别代表聚集索引和非聚集索引。返回目录6.2 使用约束6.2.2 主键约束(PRIMARY KEY)【例6.3】用T-SQL命令
创建课程表并设置课程号字段为主键。 【例6.4】用T-SQL命令修改选课表并设置学号和课程号字段为复合主键。 【例6.5】用T-S
QL命令删除【例6.4】设置的主键。返回目录6.2 使用约束6.2.2 主键约束(PRIMARY KEY)【例6.3】用T-SQL
命令创建课程表并设置课程号字段为主键。 CREATE TABLE 课程表( 课程号 char(6) PRIMARY KEY,
--在列定义之后设置主键 课程名 varchar(20) NULL, 学时 tinyint NULL, 学分 tin
yint NULL, 课程类型 nchar(5) NULL, 课程性质 nchar(2) NULL, 考核方式 n
char(2) NULL, 学期 char(1) NULL, 备注 varchar(200) NULL )
返回目录6.2 使用约束6.2.2 主键约束(PRIMARY KEY) 【例6.4】用T-SQL命令修改选课表并设置学号和课程号字
段为复合主键。 ALTER TABLE 选课表 ADD CONSTRAINT PK_XK PRIMARY K
EY(学号,课程号)—-添加表级约束 【例6.5】用T-SQL命令删除【例6.4】设置的主键。 ALTER TABLE 选
课表 DROP CONSTRAINT PK_XK 返回目录6.2 使用约束6.2.3 唯一约束(UNIQUE)
由于一个表只能定义一个主键,而实际应用中表中不止一列希望值是唯一的,例如身份证号一般不会做主键,但它的值也应确保是唯一的,这时就可
使用唯一约束来确保唯一性了。与主键不同的是一个表可以定义多个 UNIQUE 约束,且定义 UNIQUE 约束列允许空值。不过由于唯
一性,空值也只能出现一次。返回目录6.2 使用约束6.2.3 唯一约束(UNIQUE)1. 用SQL Server Managem
ent Studio实现【例6.6】对课程表的课程名设置唯一约束。 1)在SQL Server Management St
udio中选择“课程表”单击右键,选择“修改”进入表设计器。 2)单击工具栏上按钮“管理索引和键”或单击右键选择菜单“管理
索引和键”,出现如图6.3所示的“索引/键”界面,单击“添加”按钮。 3)在“类型”下拉列表中选“唯一键”,在列下拉列表中
选“课程名”,在是唯一的下拉列表中选择“是”,在名称栏输入自定的约束名,该约束名同时显示在左边的列表框中。设计完毕单击“关闭”按钮
。确认保存。返回目录6.2 使用约束6.2.3 唯一约束(UNIQUE)图 6.3索引/键界面单击“删除”按钮,可以删除列表框中选
中的约束。返回目录6.2 使用约束6.2.3 唯一约束(UNIQUE)2.用T-SQL命令实现 语法格式: [CONS
TRAINT 约束名] UNIQUE [CLUSTERED | NONCLUSTERED] [(列名1[,…n])]【例6.7】
创建学生表,对字段身份证号设置唯一约束。 【例6.8】修改学生表,对列姓名设置唯一约束。【例6.9】利用T-SQL命令删除【例6.
8】设置的唯一约束返回目录6.2 使用约束6.2.3 唯一约束(UNIQUE)【例6.7】创建学生表,对字段身份证号设置唯一约束。
CREATE TABLE dbo.学生表( 学号 char(11) NULL, 姓名 nchar(5) NULL, 性
别 nchar(1) NULL, 出生日期 datetime NULL, 身份证号 char(18) UNIQ
UE, --设置唯一约束,省略约束名,系统自动命 名 政治面貌 varchar(10), 入学时间 datetime
NULL, 联系电话 char(20) NULL, 班级 char(5) NULL, 备注 varchar(20
0) NULL)返回目录6.2 使用约束6.2.3 唯一约束(UNIQUE)【例6.8】修改学生表,对列姓名设置唯一约束。
ALTER TABLE 学生表 ADD CONSTRAINT UQ_xm UNIQUE(姓名) 如果现有列有
重名的,将返回错误信息。必须消除重复值后,才能设置,设置了唯一性后,姓名不能再有重名的出现了。【例6.9】利用T-SQL命令删除【
例6.8】设置的唯一约束 ALTER TABLE 学生表 DROP CONSTRAINT UQ_xm 返回目录
6.2 使用约束6.2.4 检查约束(CHECK约束) CHECK约束是限制用户输入某一列的数据取值,要确保输入数
据在合适的范围内,或规定限定的值,应设置检查约束。表和列可以包含多个 CHECK 约束。如果表已存在,可以添加CHECK约束,如果
约束已经存在,则允许修改或删除该约束 。返回目录6.2 使用约束6.2.4 检查约束(CHECK约束)1. 用SQL Server
Management Studio实现 【例6.10】实现限制学生表的性别字段只能取值“男”或“女”之一。 1)打开S
QL Server Management Studio,选择教务管理数据库中的“学生表”,单击右键,选择“修改”,进入表设计器。
2)在表设计器中单击右键,选择“CHECK约束”或直接单击工具栏上的按钮“管理CHECK约束”出现如图6.4“CHECK约束
”对话框。返回目录6.2 使用约束6.2.4 检查约束(CHECK约束)图 6.4 CHECK约束对话框返回目录6.2 使用约束6
.2.4 检查约束(CHECK约束) 3)单击“添加”按钮,在“表达式栏”单击进入一个小编辑框,在其中输入约束表达式,性别=''
男'' OR 性别=''女'',在“名称栏”输入约束名。约束表达式必须是T-SQL允许的关系表达式和逻辑表达式。 4)展开“表设计
器”,设置下面的三个选项,单击“关闭”按钮,关闭表设计器,确认保存表的修改后,设置完毕。返回目录6.2 使用约束6.2.4 检查约
束(CHECK约束) “表设计器”下的三个选项,每当在此表中插入或更新行时强制约束,则在选项 “ 强制用于IN
SERT和UPDATE”选“是”,“ 强制用于复制”选“是”表示每当复制代理对此表执行插入或更新时强制约束,如果要在创建约束前对现
有数据测试约束,在选项 “ 在创建或重新启用时检查现有数据 ”选“是”,如果现有数据不符合CHECK 约束,保存修改时将返回错误信
息,如果CHECK 约束仅用于新数据,则该项选“否”。返回目录6.2 使用约束6.2.4 检查约束(CHECK约束) 在
图6.4中单击“删除”按钮可以删除选中的约束。图 6.5 约束管理返回目录6.2 使用约束6.2.4 检查约束(CHECK约束)
操作检查约束也可以在对象资源管理器中直接展开表,表下有“约束”对象,单击右键,如图6.5所示,选择“新建约束”,则
进入“CHECK 约束”对话框,建立检查约束,如果约束存在,选择“修改”也进入“CHECK 约束”对话框,可进行修改,如果要删除约
束,选择“删除”,显示“删除对象”对话框,单击“确定”后将删除该约束。返回目录6.2 使用约束6.2.4 检查约束(CHECK约束
)2.用T-SQL命令实现 语法格式: [CONSTRAINT 约束名] CHECK(逻辑表达式)【例6.11】创建学生表,设置
联系电话数据格式为“xxxx-xxxxxxxxxxx”,x代表0-9数字。【例6.12】利用T-SQL命令设置课程表中的字段考核方
式只能取值“考试”或“考查”,字段学分的值在1~6之间,对已有数据不进行强制检查。【例6.13】利用T-SQL命令删除【例6.12
】设置的检查约束。返回目录6.2 使用约束6.2.4 检查约束(CHECK约束)【例6.11】创建学生表,设置联系电话数据格式为“
xxxx-xxxxxxxxxxx”,x代表0-9数字。 CREATE TABLE dbo.学生表( 学号 char(11) NUL
L, 姓名 nchar(5) NULL, 性别 nchar(1) CHECK(性别=''男'' OR 性别=''女'') , 出生日期
datetime NULL, 政治面貌 varchar(10), 入学时间 datetime NULL, 联系电话 char(
20) CHECK (联系电话 LIKE ''[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][
0-9][0-9][0-9]''), 班级 char(5) NULL, 备注 varchar(200) NULL )返回目录6
.2 使用约束6.2.4 检查约束(CHECK约束)【例6.12】利用T-SQL命令设置课程表中的字段考核方式只能取值“考试”或“
考查”,字段学分的值在1~6之间,对已有数据不进行强制检查。 ALTER TABLE 课程表 WITH CHECK ADD C
ONSTRAINT CK_课程表_1 CHECK (考核方式 in (''考查'',''考试'')) ALTER TABLE 课程表 W
ITH NOCHECK ADD CONSTRAINT CK_课程表_2 CHECK(学分 BETWEEN 1 AND 6) W
ITH NOCHECK表示对已有数据不强制约束检查,WITH CHECK表示对已有数据进行约束检查。返回目录6.2 使用约束6.2
.4 检查约束(CHECK约束)【例6.13】利用T-SQL命令删除【例6.12】设置的检查约束。 ALTER TABLE db
o.课程表 DROP CONSTRAINT CK_课程表_1,CK_课程表_2返回目录6.2 使用约束6.2.5 默认约束(
DEFAULT) 默认约束是在用户未提供某些列的数据时,数据库系统为用户提供的默认值。从而简化应用程序代码和提高系统性能。
表的每一列都可包含一个DEFAULT 定义。可以修改或删除现有的 DEFAULT 定义。默认值必须与 DEFAULT
定义适用的列的数据类型相一致,每一列只能定义一个默认值。6.2 使用约束6.2.5 默认约束(DEFAULT)1. 用SQL Se
rver Management Studio实现【例6.14】设置当对学生表的性别字段不输入值时,系统自动设置为“男”。
1)打开SQL Server Management Studio,选择教务管理数据库中的“学生表”,单击右键,选择“修改”,进入表
设计器。 2)在表设计器中选中列性别,在下面的列属性设置中,将属性“默认值或绑定”的值设为‘男’,如图6.6所示,设置完毕
,单击关闭按钮,保存设置。 将默认值添加到现有的列中,新的默认值应用于添加到该表的新数据行。在图6.6界面中,
如果“默认值或绑定”删除为空,则取消了默认值。返回目录6.2 使用约束6.2.5 默认约束(DEFAULT)图 6.6 表设计器设
置默认值返回目录6.2 使用约束6.2.5 默认约束(DEFAULT)2.用T-SQL命令实现 语法格式: [CONSTRAINT
约束名] DEFAULT 常量表达式 【例6.15】创建课程表,并设置学分默认值为2 【例6.16】修改课程表,设置考核方式默
认值为“考试” 【例6.17】删除【例6.16】设置的默认约束返回目录6.2 使用约束6.2.5 默认约束(DEFAULT)【例6
.15】创建课程表,并设置学分默认值为2。CREATE TABLE 课程表( 课程号 char(6) ,课程名 varchar
(20) NULL, 学时 tinyint NULL, 学分 tinyint DEFAULT 2, --设默认值为2
课程类型 nchar(5) NULL, 课程性质 nchar(2) NULL, 考核方式 nchar(2) NU
LL, 学期 char(1) NULL, 备注 varchar(200) NULL) 返回目录6.2 使用约束6.2.
5 默认约束(DEFAULT)【例6.16】修改课程表,设置考核方式默认值为“考试”ALTER TABLE 课程表ADD CON
STRAINT DF_课程表_考核 DEFAULT (‘考试’) FOR 考核方式 “FOR 列名”子句指明为哪列设置默认值,不能
省略。但是在列定义后直接写默认值,则可以省略。【例6.17】删除【例6.16】设置的默认约束。ALTER TABLE 课程表DRO
P CONSTRAINT DF_课程表_考核返回目录6.2 使用约束6.2.6 外键约束 外键约束强制实现参照完
整性。外键约束定义一个列,该列引用同一个表或另外一个表中已有的 PRIMARY KEY 约束或 UNIQUE 约束。外键约束可作为
表定义的一部分在创建表时创建,也可向现有表添加 FOREIGN KEY 约束。一个表可以有多个 FOREIGN KEY 约束。返回
目录6.2 使用约束6.2.6 外键约束1.用SQL Server Management Studio实现【例6.18】设置选课表
的课程号为外键,引用课程表的课程号字段。 1)打开SQL Server Management Studio,选择教务管理数据
库中的“选课表”,单击右键,选择“修改”,进入表设计器。 2)在表设计器单击右键,选择“关系”或单击工具栏上的“关系”按钮,
出现“外键关系”对话框,如图6.7所示。返回目录6.2 使用约束6.2.6 外键约束图 6.7 外键关系对话框返回目录6.2 使用
约束6.2.6 外键约束 3)单击“表和列规范”属性对应的设置按钮,出现“表和列”对话框如图6.8所示。 返回目录图 6.
8 表和列对话框6.2 使用约束6.2.6 外键约束 4)选择主键表为课程表,主键为课程号,选择选课表的课程号为外键,单击“确定”
按钮,返回到“外键关系”对话框,设置关系名称,其他选项根据要求设置,通常选默认值即可,设置完毕单击关闭按钮,保存设置。返回目录6.
2 使用约束6.2.6 外键约束2. 用T-SQL 命令实现 命令格式: [CONSTRAINT 约束名] FOREIG
N KEY(列名)REFERENCES 被引用表(列名) [ON DELETE CASCADE | ON UPDATE CASEC
ADE] 说明:ON DELETE CASCADE 表示级联删除,当在主键表中删除被引用行时,外键表中的引用行也一起被删除
。ON UPDATE CASECADE表示级联更新,当在主键表中更新被引用行时,外键表中的引用行也一起被更新。 返回目录6.
2 使用约束6.2.6 外键约束 【例6.19】创建选课表,设置选课表的课程号为外键,引用课程表的课程号字段。 【例6.20】修
改选课表,设置选课表的学号为外键,引用学生表的学号字段。返回目录6.2 使用约束6.2.6 外键约束【例6.19】创建选课表,设置
选课表的课程号为外键,引用课程表的课程号字段。CREATE TABLE 选课表( 学号 char(11), 课程号 char(6)
REFERENCES 课程表(课程号) ON UPDATE CASCADE, 成绩 numeric(5, 1),) 返回目录6.
2 使用约束6.2.6 外键约束【例6.20】修改选课表,设置选课表的学号为外键,引用学生表的学号字段。 ALTER
TABLE 选课表 WITH CHECK ADD CONSTRAINT FK_选课表_学生表 FOREIGN
KEY(学号) REFERENCES 学生表(学号) ON UPDATE CASCADE 返回目录6
.2 使用约束6.2.6 外键约束 设置外键时,被引用表(即主键表)必须设置了主键或唯一键,且类型和宽度必须和外键一致
,但名称可以不同。 设置了主外键关系后,数据表的关系通过关系图可以一目了然,如图6.9所示。返回目录6.2 使用约束6
.2.6 外键约束图 6.9 数据库库关系图返回目录6.2 使用约束6.2.6 外键约束 数据库库关系图可以通过SQL
Server Management Studio建立,在对象资源管理器中展开数据库“教务管理数据库”,选择“数据库关系图”,单击
右键,选择“新建数据库关系图”,接下来添加建立关系的表,即可看到关系,如果主外键关系没有设置,也可以在这里设置。返回目录6.3 使
用默认 默认值对象和表列的默认值的功能几乎一致。但默认值对象是不依附于表的数据对象,默认值对象的作用范围可以在
整个数据库。它既可以被绑定到一个或多个列上,还可以绑定到用户自定义数据类型上。 默认值对象的应用首先是创建默认,
然后将其绑定到指定列或数据类型上。当取消默认时,可以解除绑定,如果默认不再有用时可以删除。但表列的默认值在表结构设计或修改时建立或
删除,随表的删除也消失。返回目录6.3 使用默认6.3.1 创建默认 创建默认只能通过T-SQL命令实现。需使用CREATE DA
FAULT命令。 命令格式: CREATE DAFAULT 默认对象名 AS 常量表达式 默认对象名必须符合标识符命名规
则。常量表达式是指只包含常量值的表达式(不能包含任何列或其他数据库对象的名称)。可以使用任何常量、内置函数或数学表达式。 返
回目录6.3 使用默认6.3.1 创建默认 【例6.21】利用T-SQL 创建默认对象,默认值为“共青
团员”。 CREATE DEFAULT DF_政治面貌 AS ''共青团员'' 返回目录6.3 使用默认6.3.2 绑定默认
默认值对象创建之后,需要将其绑定到列上或用户定义的数据类型上才能起作用。当向绑定了默认的列或使用绑定默认的用户定
义数据类型的所有列插入或更新数据时,新的数据必须符合规则。本节例题做完后要进行数据插入或修改来验证默认值的作用。返回目录6.3 使
用默认6.3.2 绑定默认1.用SQL Server Management Studio实现【例6.22】将【例6.21】创建的默
认对象绑定到列,方法如下:1)打开SQL Server Management Studio,选择数据库中要绑定默认的表“学生表”,
单击右键,选择“修改”,进入表设计器。2)选中要绑定的列“政治面貌”,在列属性下的“默认值或绑定列”对应设置下拉列表中选择默认值对
象DF_政治面貌。如图6.10所示。3)设置完毕单击关闭按钮,保存设置。返回目录6.3 使用默认6.3.2 绑定默认如果是绑定到用
户定义数据类型,方法如下:1)展开数据库,展开“可编程性”/“类型”/“用户定义数据类型”,如图6.11所示。2)单击右键,如果类
型不存在,选择“新建用户定义数据类型”,如果类型已经创建,可选择“属性”进入“用户定义数据类型”界面,如图6.12所示。3)在“名
称”文本框输入用户定义数据类型的名称,单击“默认值”右边的小按钮,进入“选择对象”界面,如图6.13所示。返回目录6.3 使用默认
6.3.2 绑定默认4)单击“浏览”按钮,进入“查找对象”界面,如图6.14所示。选择默认值对象。5)单击“确定”按钮返回图6.1
3,单击“确定” 返回图6.12,再单击“确定”设置完毕。 当定义了绑定有默认对象的用户定义数据类型后,在创建表时,某个列应用
了该类型,默认值也将生效 。返回目录6.3 使用默认6.3.2 绑定默认图 6.10 绑定默认值对象到列返回目录6.3 使用默认6
.3.2 绑定默认图 6.11 绑定默认值对象到用户定义数据类型返回目录6.3 使用默认6.3.2 绑定默认图 6.12 用户定义
数据类型界面返回目录6.3 使用默认6.3.2 绑定默认图 6. 13 选择对象界面返回目录6.3 使用默认6.3.2 绑定默认图
6. 14 查找对象界面返回目录6.3 使用默认6.3.2 绑定默认2.用T-SQL命令实现 用T-SQL命令实现绑定
默认值对象要用到系统存储过程SP_BINDEFAULT。 命令格式: EXEC SP_BINDEFAULT ''默认值对象名
'', ''对象名'' [,''futureonly_flag'']返回目录6.3 使用默认6.3.2 绑定默认 【例6.23】将【例6.2
1】创建的默认对象绑定到学生表的政治面貌列上。 EXEC SP_BINDEFAULT ''DF_政治面貌'', ''学生表.[政治
面貌]'' 返回目录6.3 使用默认6.3.2 绑定默认 默认值对象名和对象名一定要用单引号引住。默认值对象必须
和绑定的对象的数据类型兼容。对象名可以是列,也可以是用户定义数据类型。如果是列的话一定要指明是哪个表的哪个列,格式为表名.列名。f
utureonly_flag只有在绑定到用户定义数据类型时才使用。它的默认值为NULL,当参数设置为futureonly时,只对新
插入的数据行应用默认对象。返回目录6.3 使用默认6.3.3 解除绑定1. 用SQL Server Management Stud
io实现 解除绑定的方法,同绑定的操作。如果是解除绑定列,方法如下:1)打开SQL Server Management Studi
o,选择数据库中要绑定默认的表“学生表”,单击右键,选择“修改”,进入表设计器,如图6.10所示。2)选中要解除绑定的列,在列属性
下的“默认值或绑定列”对应设置下删除择默认值对象。单击关闭按钮,保存设置。返回目录6.3 使用默认6.3.3 解除绑定如果是解除绑
定到用户定义数据类型的默认值对象,方法如下:1)展开数据库,展开“可编程性”/“类型”/“用户定义数据类型”,选中解绑的类型,如图
6.11所示。2)单击右键选择“属性”进入“用户定义数据类型”界面,如图6.12所示,删除默认值对象。单击“确定”按钮。返回目录6
.3 使用默认6.3.3 解除绑定2.用T-SQL命令实现 用T-SQL命令实现解除绑定要用到系统存储过程SP_UNBIND
EFAULT。 命令格式: EXEC SP_UNBINDEFAULT ''对象名'' [,''futureonly_flag
'']返回目录6.3 使用默认6.3.3 解除绑定【例6.24】解除【例6.23】绑定到学生表的政治面貌列上的默认对象。 E
XEC SP_UNBINDEFAULT ''学生表.政治面貌''返回目录6.3 使用默认6.3.3 解除绑定 同绑定一样,对象名一定
要用单引号引住。对象名可以是列,也可以是用户定义数据类型。如果是列,格式为表名.列名。如果该默认对象绑定到多个列,只有解除绑定的列
,默认值失效。futureonly_flag只有在绑定到用户定义数据类型时才使用。将对象名换成用户定义数据类型名,则解除了到数据类
型的绑定,所有定义为这个类型的列的默认值也不再起作用。返回目录6.3 使用默认6.3.4 删除默认1. 用SQL Server M
anagement Studio实现方法如下:1)打开SQL Server Management Studio,展开数据库,展开“
可编程性”/“默认值”,选中要删除的默认值对象名。2)单击右键选择“删除”进入“删除对象”界面,单击“确定”按钮即可。返回目录6.
3 使用默认6.3.4 删除默认2.用T-SQL命令实现 用T-SQL命令实现删除默认要用命令DROP DEFAULT。 命令
格式: DROP DEFAULT 默认值对象名 【例6.25】删除默认对象DF_政治面貌。 DROP DEFAULT DF_政
治面貌返回目录6.3 使用默认6.3.4 删除默认 执行了DROP DEFAULT命令,如果默认值没有绑定到列或用户定义的数据类
型,将显示命令成功完成信息,如果有绑定,则显示无法删除信息,解决的方法先解除绑定,再删除。可以通过对象资源管理器找到默认对象名,单
击右键选择“查看依赖关系”看到有哪些列或用户定义类型绑定了默认值。返回目录6.4 使用规则 规则是保证域完整性的主要手段。它的
作用与检查约束的功能基本相同。CHECK 约束是对列中的值进行约束的首选标准方法,CHECK 约可以对一列或多列定义多个约束。列或
用户定义数据类型只能有一个绑定的规则。但是,列可以同时具有规则和一个或多个与其关联的检查约束。在这种情况下,将检查所有限制。 规
则和默认值一样都是作为独立的对象,它们定义一次,要应用它必须绑定到一列或多列,或用户定义数据类型,不需要时可以解除绑定以及删除。返
回目录6.4 使用规则6.4.1 创建规则 创建规则只能通过T-SQL命令实现。需使用CREATE RULE命令。 命令
格式: CREATE RULE 规则名 AS 表达式 规则名必须符合标识符命名规则。表达式是定义规则的条件,可以是
WHERE 子句中任何有效的表达式,并且可以包含诸如算术运算符、关系运算符和谓词(如 IN、LIKE、BETWEEN)之类的元素
。表达式包含一个局部变量,前面都有一个 @ 符号。该变量表示在更新或插入语句输入的值。返回目录6.4 使用规则6.4.1 创建规则
【例6.26】利用T-SQL 创建规则,用于数值的取值范围在(0~10] 之间。 CREATE RULE R_学分AS @xf
>0 AND @xf<=10 【例6.27】利用T-SQL 创建规则,用于数值的取值只能取考试或考查。 CREATE RULE
R_考试AS @ks in(''考试'',''考查'')返回目录6.4 使用规则6.4.1 创建规则 【例6.28】利用T-SQL 创建
规则,用于数值的取值只能取整数数值0~8。 CREATE RULE R_学期AS @xq like ''[0-8]‘ 创建好规
则后可以在对象资源管理器中,展开“教务管理数据库”/“可编程性”/“规则”下看到创建的规则对象。 返回目录6.4 使用规则6.4.
2 绑定规则 规则创建之后,需要将其绑定到列上或用户定义的数据类型上才能起作用。当向绑定了规则的列或使用绑定规则的
用户定义数据类型的所有列插入或更新数据时,新的数据必须符合规则。本节例题做完后要进行数据插入或修改来验证规则的作用。返回目录6.4
使用规则6.4.2 绑定规则1.用SQL Server Management Studio实现 在SQL Server Mana
gement Studio下绑定规则只能绑定到用户定义数据类型,方法如下:1)打开SQL Server Management St
udio,展开数据库,展开“可编程性”/“类型”/“用户定义数据类型”,如图6.11所示。2)单击右键,如果类型不存在,选择“新建
用户定义数据类型”,如果类型已经创建,可选择“属性”进入“用户定义数据类型”界面,如图6.12所示。3)单击“规则”右边的小按钮,
进入“选择对象窗口”,如图6.15所示。返回目录6.4 使用规则6.4.2 绑定规则4)单击“浏览”按钮,进入“查找对象”界面,如
图6.16所示。选择规则对象。单击“确定”按钮返回图6.15,所选择的规则对象显示在列表框中。5)单击确定按钮,返回图6.12,单
击“确定”按钮,绑定完毕。 当定义绑定有规则的用户定义数据类型后,在创建表时,某个列应用了该类型,规则也将生效。返回目录6.4 使
用规则6.4.2 绑定规则图 6. 15 选择对象界面返回目录6.4 使用规则6.4.2 绑定规则图 6. 16 查找对象界面返回
目录6.4 使用规则6.4.2 绑定规则2.用T-SQL命令实现 用T-SQL命令实现绑定规则要用到系统存储过程SP_BIND
RULE。 命令格式: EXEC SP_BINDEFAULT ''规则名'', ''对象名'' [,''futureonly_f
lag'']【例6.29】将【例6.26】创建的规则绑定到课程表的学分列上。 EXEC SP_BINDRULE ''R_学分''
,''课程表.学分''返回目录6.4 使用规则6.4.2 绑定规则 规则名和对象名一定要用单引号引住。注意列的类型和用户定义数据类型
要和表达式中的变量类型一致或兼容。对象名可以是列,也可以是用户定义数据类型。如果是列的话一定要指明是哪个表的哪个列,格式为表名.列
名。futureonly_flag只有在绑定到用户定义数据类型时才使用。它的默认值为NULL,当参数设置为futureonly时,
只对新插入的数据行应用规则。返回目录6.4 使用规则6.4.3 解除绑定1. 用SQL Server Management Stu
dio实现 解除绑定的方法,同绑定的操作。只适用于用户定义数据类型,方法如下:1)打开SQL Server Management
Studio,展开数据库,展开“可编程性”/“类型”/“用户定义数据类型”。2)选中解绑的类型,单击右键选择“属性”进入“用户定义
数据类型”界面,删除规则,单击“确定”按钮即可。返回目录6.4 使用规则6.4.3 解除绑定2.用T-SQL命令实现 用T-SQL
命令实现解除绑定规则要用到系统存储过程SP_UNBINDRULE。 命令格式: EXEC SP_UNBINDRULE ''对象名
'' [,''futureonly_flag''] 【例6.30】解除【例6.29】绑定到课程表的学分列上的规则。 EXEC
SP_UNBINDRULE ''课程表.学分''返回目录6.4 使用规则6.4.3 解除绑定 同绑定一样,对象名一定
要用单引号引住。对象名可以是列,也可以是用户定义数据类型。如果是列,格式为表名.列名。只有解除绑定的列,规则失效。futureon
ly_flag只有在绑定到用户定义数据类型时才使用。将对象名换成用户定义数据类型名,则解除了到数据类型的绑定,所有定义为这个类型的
列的规则不再起作用。返回目录6.4 使用规则6.4.4 删除规则1. 用SQL Server Management Studio实
现 在SQL Server Management Studio下删除规则非常简单,方法如下:1)打开SQL Server Mana
gement Studio,展开数据库,展开“可编程性”/“规则”,选中要删除的规则名2)单击右键选择“删除”进入“删除对象”界面
,单击“确定”按钮即可。返回目录6.4 使用规则6.4.4 删除规则2.用T-SQL命令实现 用T-SQL命令实现删除规则要用命令
DROP RULE。 命令格式: DROP RULE 规则名 【例6.31】删除【例6.26】创建的规则R_学分。 DROP R
ULE R_学分返回目录6.4 使用规则6.4.4 删除规则 执行了DROP RULE命令,如果规则没有绑定到列或用户定义的数据
类型,将显示命令成功完成信息,如果有绑定,则显示无法删除信息,解决的方法先解除绑定,再删除。可以通过对象资源管理器找到规则名,单击右键选择“查看依赖关系”看到有哪些列或用户定义类型绑定了规则。返回目录6.5 使用标识列 标识列的意义是当用户向表中插入新的数据行时,系统自动为该行的IDENTITY列赋值,并保证其值在表中的唯一性。每个表中只能有一个IDENTITY列,其列值不能由用户更新,不允许空值,也不允许绑定默认值或建立DEFAULT 约束。IDENTITY列常与PRIMARY KEY约束一起使用,从而保证表中各行具有唯一标识。 标识列的有效数据类型可以是任何整数数据类型分类的数据类型(bit 数据类型除外),也可以是 decimal 数据类型,但不允许出现小数。返回目录6.5 使用标识列1. 用SQL Server Management Studio实现 方法如下:1)打开SQL Server Management Studio,选择“表”,单击右键,选择“新建表”或选择已存在的表名,单击右键,选择“修改”进入如图6.17所示的表设计器中。2)选中某列,在“列属性”选项中,展开“标识规范”,下面有一个“(是标识)”下拉列表框,在这里选泽“是”定义标识列。3)根据需求设置“标识增量”和“标识种子”两项数值。关闭窗口,保存设置。返回目录6.5 使用标识列图 6. 17 表设计器界面 系统自动根据“标识子” 和“标识增量”为IDENTITY列赋值,“标识种子”指定初始值, “标识增量” 指定步长值。两者的默认值均为1。返回目录6.5 使用标识列2.用T-SQL命令实现 用T-SQL命令使用IDENTITY列在需要设置为标识列的列后面书写下面的命令。 命令格式: IDENTITY [( 种子, 增量) ] 【例6.32】创建用户表,并设置一标识列,标识种子为100,标识增量为1,该列设为主键。返回目录6.5 使用标识列【例6.32】创建用户表,并设置一标识列,标识种子为100,标识增量为1,该列设为主键。CREATE TABLE 用户表 (Id int IDENTITY(100,1) NOT NULL PRIMARY KEY, --标识列 用户名 varchar(11) NOT NULL, 密码 varchar(10) NOT NULL, 用户类型 varchar(20) NULL, ) 表创建好后,向表中插入数据不必指定标识列,该列的值系统自动按照100,101…填充。返回目录小结 本章主要讲述了如何利用SQL Server Management Studio和T-SQL命令两种方法对数据表实施数据完整性操作,包括约束、默认值对象、规则的管理以及标识列的应用。数据完整性技术既是衡量数据库功能高低的指标,也是提高数据库中数据质量的重要手段。 返回目录
献花(0)
+1
(本文系大高老师首藏)