1、第第6 6章章 数据完整性实施数据完整性实施 知识技能目标知识技能目标:1.理解数据完整性概念。理解数据完整性概念。2.掌握使用约束实施数据完整性的方法。掌握使用约束实施数据完整性的方法。3.掌握使用规则实施数据完整性的方法。掌握使用规则实施数据完整性的方法。4.掌握使用默认值对象实施数据完整性的方。掌握使用默认值对象实施数据完整性的方。5.掌握标识列的使用。掌握标识列的使用。引导案例:引导案例:在教务管理数据库的表中输入数据时,发现会有一在教务管理数据库的表中输入数据时,发现会有一些不正常情况,如对不同的学生输入了相同的学号,有些不正常情况,如对不同的学生输入了相同的学号,有的学生姓名没有输
2、入,相同的数据行被存储多次,性别的学生姓名没有输入,相同的数据行被存储多次,性别字段的值除了有男女之外,还输入了其他非性别的无关字段的值除了有男女之外,还输入了其他非性别的无关数,学生班级为不存在的班级,选课表中输入了不存在数,学生班级为不存在的班级,选课表中输入了不存在的学号,选的课程是学校没有开过的课程等等。之所以的学号,选的课程是学校没有开过的课程等等。之所以会出现这些混乱数据,是因为没有实现完整性设计。为会出现这些混乱数据,是因为没有实现完整性设计。为了避免发生这些不正常状况,就需要实施数据完整性,了避免发生这些不正常状况,就需要实施数据完整性,实现第实现第2章中的数据完整性设计。章中
3、的数据完整性设计。第第6 6章章 数据完整性实施数据完整性实施 第第6 6章章 数据完整性实施数据完整性实施6.1 6.1 数据完整性实施方法数据完整性实施方法6.2 6.2 使用约束使用约束6.3 6.3 使用默认使用默认6.4 6.4 使用规则使用规则6.5 6.5 使用标识列使用标识列小结小结6.1 6.1 数据完整性实施方法数据完整性实施方法 有两种方式可以实现数据完整性,即声明数据完整性和过程数据完整性。1 1声明数据完整性声明数据完整性 使用声明数据完整性就是通过在对象定义中来实现,即定义数据必须满足的条件作为对象定义的一部分。它包括使用各种约束、默认和规则。实现数据完整性的首选方
4、法是使用声明完整性。2过程完整性过程完整性 过程数据完整性是通过在脚本语言中定义来实现的。当执行这些脚本时,就可以强制完整性的实现。过程数据完整性的方式包括使用触发器和存储过程。也可以在客户机或服务器上使用其他的编程语言和工具实现。返回目录6.2 6.2 使用约束使用约束 约束是强制数据完整性的首选方法。应先确定约束的类型,不同类型的约束强制不同类型的数据完整性。约束可以通过SQL Server Management Studio和T-SQL语句实现,既可以在创建表时设置,也可以通过修改表添加约束。T-SQL语句实现约束的通用语法格式分为以下两种情况:列级约束语法格式:n 列名 数据类型 CO
5、NSTRAIN约束名 约束类型n 列级约束直接在需要设置约束的列定义之后书写。返回目录6.2 6.2 使用约束使用约束 表级约束语法格式:CONSTRAINT 约束名 约束类型表级约束在表的所有列定义之后书写。在设置约束时,约束名可以省略,系统会自动起一个约束名。但建议用户自己起名。如果是表已存在,通过修改表的方式添加约束,通用格式为:ALTER TABLE 表名 ADD CONSTRAINT 约束名 约束类型 约束类型包括空约束、主键约束、唯一键约束、检查约束、默认和外键约束。返回目录6.2 6.2 使用约束使用约束 利用T-SQL命令修改约束,必须先删除约束,再重新创建或添加。删除约束的基
6、本格式为:ALTER TABLE 表名 DROP CONSTRAIN 约束名,n返回目录6.2 6.2 使用约束使用约束6.2.1 6.2.1 空约束(空约束(NULLNULL)、非空约束()、非空约束(NOT NULLNOT NULL)在设计表时,表中某些列非常重要,如果不输入值则信息不完整,这样的列应设计为不允许为空。比如学生表的学生学号、姓名。默认情况下,列允许空值。在数据库中 NULL 是特殊值,一个列中出现NULL值,意味着用户还没有为该列输入值。NULL既不等价于数值型数据0,也不等价于字符型数据空串,只表明该列是未知的。在用插入命令插入数据时,要表示空数据,不能用引号因住,如NU
7、LL这样表示。返回目录6.2 6.2 使用约束使用约束6.2.1 6.2.1 空约束(空约束(NULLNULL)、非空约束()、非空约束(NOT NULLNOT NULL)1.1.用用SQL Server Management StudioSQL Server Management Studio实现实现 【例6.1】设置学生表中字段学号、姓名、性别、入学时间不允许为空。1)打开SQL Server Management Studio,在对象资源管理器中展开教务管理系统,展开“表”结点。2)选择“学生表”,单击右键,选择“修改”进入表设计器进行表结构设计,如图6.1所示,分别将学号、姓名、性别、
8、入学时间字段后的允许空复选框去掉对勾。3)修改完毕后单击工具栏上的“保存”图标或选择菜单“文件”下的“保存”项,关闭窗口即可。返回目录6.2 6.2 使用约束使用约束6.2.1 6.2.1 空约束(空约束(NULLNULL)、非空约束()、非空约束(NOT NULLNOT NULL)图 6.1 设置空约束和非空约束返回目录6.2 6.2 使用约束使用约束6.2.1 6.2.1 空约束(空约束(NULLNULL)、非空约束()、非空约束(NOT NULLNOT NULL)o 如果表中某列原先设计为允许空,现要修改为不允许为空,则只有当现有列不存在空值时,才可以进行。否则返回错误信息。o 如果学生
9、表不存在,则选择“新建”表,进入表设计器进行设置。返回目录6.2 6.2 使用约束使用约束6.2.1 6.2.1 空约束(空约束(NULLNULL)、非空约束()、非空约束(NOT NULLNOT NULL)2.2.用用T-SQLT-SQL命令实现命令实现 空约束或非空约束,只能设置列级约束。直接在列定义后书写NULL或NOT NULL。语法格式:列定义 NULL|NOT NUL例6.1 设置学生表中字段学号、姓名、性别、入学时间不允许为空。返回目录6.2 6.2 使用约束使用约束6.2.1 6.2.1 空约束(空约束(NULLNULL)、非空约束()、非空约束(NOT NULLNOT NUL
10、L)例6.1(1)创建表设置CREATE TABLE dbo.学生表(学号 char(11)NOT NULL,-不允许为空 姓名 nchar(5)NOT NULL,-不允许为空 性别 nchar(1)NOT NULL,-不允许为空 出生日期 datetime NULL,政治面貌 varchar(10),入学时间 datetime NOT NULL,-不允许为空 联系电话 char(20)NULL,班级 char(5)NULL,备注 varchar(200)NULL )返回目录6.2 6.2 使用约束使用约束6.2.1 6.2.1 空约束(空约束(NULLNULL)、非空约束()、非空约束(NO
11、T NULLNOT NULL)例6.1(2)修改表设置ALTER TABLE 学生表ALTER COLUMN 学号 CHAR(11)NOT NULLALTER TABLE 学生表ALTER COLUMN 姓名 NCHAR(5)NOT NULLALTER TABLE 学生表ALTER COLUMN 性别 NCHAR(1)NOT NULLALTER TABLE 学生表ALTER COLUMN 入学时间 DATETIME NOT NULL执行下列插入数据进行验证效果。INSERT INTO学生表(学号,姓名)VALUES(20070101110,张致)返回目录6.2 6.2 使用约束使用约束6.2.
12、2 6.2.2 主键约束(主键约束(PRIMARY KEYPRIMARY KEY)在插入数据时,要保证数据不出现重复行,至少要有一列是唯一的,如果这个列是能唯一地标识表中的行信息的,或者某个表要引用这个列,则将该列设置主键约束。一个表都应有一个主键,且只能有一个主键约束。设置为主键的列系统自动设置其不允许为空。如果已有主键约束,要改变新列为主键,则必须先删除现有的主键约束,然后再创建新的主键。但是当主键约束由另一表的外键约束引用时,不能删除主键约束,要删除它,必须先删除外键约束。主键可以是一列,也可以是多列组合成的复合主键。image、text数据类型的字段不能设置为主键。返回目录6.2 6.
13、2 使用约束使用约束6.2.2 6.2.2 主键约束(主键约束(PRIMARY KEYPRIMARY KEY)1.用SQL Server Management Studio实现【例6.2】设置学生表学号字段为主键。1)打开SQL Server Management Studio,在对象资源管理器中展开教务管理系统,展开“表”结点。2)选择“学生表”,单击右键,选择“修改”进入表设计器进行表结构设计,选择“学号”列。3)单击工具栏上按钮“设置主键”,或者单击右键,从快捷菜单选择“设置主键”如图6.2所示,小钥匙将出现在学号旁边指示栏上。“设置主键”是奇偶键,设置主键后变为“移除主键”,选择它可以
14、取消主键。如果要设置复合主键时,利用SHIFT或CTRL键控制选中要设置的字段。返回目录6.2 6.2 使用约束使用约束6.2.2 6.2.2 主键约束(主键约束(PRIMARY KEYPRIMARY KEY)图 6.2 设置主键返回目录6.2 6.2 使用约束使用约束6.2.2 6.2.2 主键约束(主键约束(PRIMARY KEYPRIMARY KEY)4)修改完毕后单击工具栏上的“保存”图标或选择菜单“文件”下的“保存”项,关闭窗口即可。当向表中的现有列添加 PRIMARY KEY 约束时,表中现有的数据必须没有空值,也没有重复值,否则就违反了惟一性约束,系统将返回错误信息。如果列是允许
15、为空的,必须修改为不允许为空,才能设置为主键。返回目录6.2 6.2 使用约束使用约束6.2.2 6.2.2 主键约束(主键约束(PRIMARY KEYPRIMARY KEY)2.用T-SQL命令实现 语法格式:CONSTRAINT 约束名 PRIMARY KEY CLUSTERED|NONCLUSTERED(列名1,n)说明:CLUSTERED和 NONCLUSTERED 分别代表聚集索引和非聚集索引。返回目录6.2 6.2 使用约束使用约束6.2.2 6.2.2 主键约束(主键约束(PRIMARY KEYPRIMARY KEY)【例6.3】用T-SQL命令创建课程表并设置课程号字段为主键。
16、【例6.4】用T-SQL命令修改选课表并设置学号和课程号字段为复合主键。【例6.5】用T-SQL命令删除【例6.4】设置的主键。返回目录6.2 6.2 使用约束使用约束6.2.2 6.2.2 主键约束(主键约束(PRIMARY KEYPRIMARY KEY)【例6.3】用T-SQL命令创建课程表并设置课程号字段为主键。CREATE TABLE 课程表(课程号 char(6)PRIMARY KEY,-在列定义之后设置主键 课程名 varchar(20)NULL,学时 tinyint NULL,学分 tinyint NULL,课程类型 nchar(5)NULL,课程性质 nchar(2)NULL,
17、考核方式 nchar(2)NULL,学期 char(1)NULL,备注 varchar(200)NULL )返回目录6.2 6.2 使用约束使用约束6.2.2 6.2.2 主键约束(主键约束(PRIMARY KEYPRIMARY KEY)【例6.4】用T-SQL命令修改选课表并设置学号和课程号字段为复合主键。ALTER TABLE 选课表 ADD CONSTRAINT PK_XK PRIMARY KEY(学号,课程号)-添加表级约束【例6.5】用T-SQL命令删除【例6.4】设置的主键。ALTER TABLE 选课表 DROP CONSTRAINT PK_XK 返回目录6.2 6.2 使用约束
18、使用约束6.2.3 6.2.3 唯一约束(唯一约束(UNIQUEUNIQUE)由于一个表只能定义一个主键,而实际应用中表中不止一列希望值是唯一的,例如身份证号一般不会做主键,但它的值也应确保是唯一的,这时就可使用唯一约束来确保唯一性了。与主键不同的是一个表可以定义多个 UNIQUE 约束,且定义 UNIQUE 约束列允许空值。不过由于唯一性,空值也只能出现一次。返回目录6.2 6.2 使用约束使用约束6.2.3 6.2.3 唯一约束(唯一约束(UNIQUEUNIQUE)1.用SQL Server Management Studio实现【例6.6】对课程表的课程名设置唯一约束。1)在SQL Se
19、rver Management Studio中选择“课程表”单击右键,选择“修改”进入表设计器。2)单击工具栏上按钮“管理索引和键”或单击右键选择菜单“管理索引和键”,出现如图6.3所示的“索引/键”界面,单击“添加”按钮。3)在“类型”下拉列表中选“唯一键”,在列下拉列表中选“课程名”,在是唯一的下拉列表中选择“是”,在名称栏输入自定的约束名,该约束名同时显示在左边的列表框中。设计完毕单击“关闭”按钮。确认保存。返回目录6.2 6.2 使用约束使用约束6.2.3 6.2.3 唯一约束(唯一约束(UNIQUEUNIQUE)图 6.3索引/键界面单击“删除”按钮,可以删除列表框中选中的约束。返回
20、目录6.2 6.2 使用约束使用约束6.2.3 6.2.3 唯一约束(唯一约束(UNIQUEUNIQUE)2.用T-SQL命令实现 语法格式:CONSTRAINT 约束名 UNIQUE CLUSTERED|NONCLUSTERED(列名1,n)【例6.7】创建学生表,对字段身份证号设置唯一约束。【例6.8】修改学生表,对列姓名设置唯一约束。【例6.9】利用T-SQL命令删除【例6.8】设置的唯一约束返回目录6.2 6.2 使用约束使用约束6.2.3 6.2.3 唯一约束(唯一约束(UNIQUEUNIQUE)【例6.7】创建学生表,对字段身份证号设置唯一约束。CREATE TABLE dbo.学
21、生表(学号 char(11)NULL,姓名 nchar(5)NULL,性别 nchar(1)NULL,出生日期 datetime NULL,身份证号 char(18)UNIQUE,-设置唯一约束,省略约束名,系统自动命 名 政治面貌 varchar(10),入学时间 datetime NULL,联系电话 char(20)NULL,班级 char(5)NULL,备注 varchar(200)NULL)返回目录6.2 6.2 使用约束使用约束6.2.3 6.2.3 唯一约束(唯一约束(UNIQUEUNIQUE)【例6.8】修改学生表,对列姓名设置唯一约束。ALTER TABLE 学生表 ADD C
22、ONSTRAINT UQ_xm UNIQUE(姓名)如果现有列有重名的,将返回错误信息。必须消除重复值后,才能设置,设置了唯一性后,姓名不能再有重名的出现了。【例6.9】利用T-SQL命令删除【例6.8】设置的唯一约束 ALTER TABLE 学生表 DROP CONSTRAINT UQ_xm 返回目录6.2 6.2 使用约束使用约束6.2.4 6.2.4 检查约束(检查约束(CHECKCHECK约束)约束)CHECK约束是限制用户输入某一列的数据取值,要确保输入数据在合适的范围内,或规定限定的值,应设置检查约束。表和列可以包含多个 CHECK 约束。如果表已存在,可以添加CHECK约束,如果
23、约束已经存在,则允许修改或删除该约束。返回目录6.2 6.2 使用约束使用约束6.2.4 6.2.4 检查约束(检查约束(CHECKCHECK约束)约束)1.用SQL Server Management Studio实现 【例6.10】实现限制学生表的性别字段只能取值“男”或“女”之一。1)打开SQL Server Management Studio,选择教务管理数据库中的“学生表”,单击右键,选择“修改”,进入表设计器。2)在表设计器中单击右键,选择“CHECK约束”或直接单击工具栏上的按钮“管理CHECK约束”出现如图6.4“CHECK约束”对话框。返回目录6.2 6.2 使用约束使用约束
24、6.2.4 6.2.4 检查约束(检查约束(CHECKCHECK约束)约束)图 6.4 CHECK约束对话框返回目录6.2 6.2 使用约束使用约束6.2.4 6.2.4 检查约束(检查约束(CHECKCHECK约束)约束)3)单击“添加”按钮,在“表达式栏”单击进入一个小编辑框,在其中输入约束表达式,性别=男 OR 性别=女,在“名称栏”输入约束名。约束表达式必须是T-SQL允许的关系表达式和逻辑表达式。4)展开“表设计器”,设置下面的三个选项,单击“关闭”按钮,关闭表设计器,确认保存表的修改后,设置完毕。返回目录6.2 6.2 使用约束使用约束6.2.4 6.2.4 检查约束(检查约束(C
25、HECKCHECK约束)约束)“表设计器”下的三个选项,每当在此表中插入或更新行时强制约束,则在选项 “强制用于INSERT和UPDATE”选“是”,“强制用于复制”选“是”表示每当复制代理对此表执行插入或更新时强制约束,如果要在创建约束前对现有数据测试约束,在选项“在创建或重新启用时检查现有数据”选“是”,如果现有数据不符合CHECK 约束,保存修改时将返回错误信息,如果CHECK 约束仅用于新数据,则该项选“否”。返回目录6.2 6.2 使用约束使用约束6.2.4 6.2.4 检查约束(检查约束(CHECKCHECK约束)约束)在图6.4中单击“删除”按钮可以删除选中的约束。图 6.5 约
26、束管理返回目录6.2 6.2 使用约束使用约束6.2.4 6.2.4 检查约束(检查约束(CHECKCHECK约束)约束)操作检查约束也可以在对象资源管理器中直接展开表,表下有“约束”对象,单击右键,如图6.5所示,选择“新建约束”,则进入“CHECK 约束”对话框,建立检查约束,如果约束存在,选择“修改”也进入“CHECK 约束”对话框,可进行修改,如果要删除约束,选择“删除”,显示“删除对象”对话框,单击“确定”后将删除该约束。返回目录6.2 6.2 使用约束使用约束6.2.4 6.2.4 检查约束(检查约束(CHECKCHECK约束)约束)2.用T-SQL命令实现语法格式:CONSTRA
27、INT 约束名 CHECK(逻辑表达式)【例6.11】创建学生表,设置联系电话数据格式为“xxxx-xxxxxxxxxxx”,x代表0-9数字。【例6.12】利用T-SQL命令设置课程表中的字段考核方式只能取值“考试”或“考查”,字段学分的值在16之间,对已有数据不进行强制检查。【例6.13】利用T-SQL命令删除【例6.12】设置的检查约束。返回目录6.2 6.2 使用约束使用约束6.2.4 6.2.4 检查约束(检查约束(CHECKCHECK约束)约束)【例6.11】创建学生表,设置联系电话数据格式为“xxxx-xxxxxxxxxxx”,x代表0-9数字。CREATE TABLE dbo.
28、学生表(学号 char(11)NULL,姓名 nchar(5)NULL,性别 nchar(1)CHECK(性别=男 OR 性别=女),出生日期 datetime NULL,政治面貌 varchar(10),入学时间 datetime NULL,联系电话 char(20)CHECK(联系电话 LIKE 0-90-90-90-9-0-90-90-90-90-90-90-9),班级 char(5)NULL,备注 varchar(200)NULL )返回目录6.2 6.2 使用约束使用约束6.2.4 6.2.4 检查约束(检查约束(CHECKCHECK约束)约束)【例6.12】利用T-SQL命令设置课
29、程表中的字段考核方式只能取值“考试”或“考查”,字段学分的值在16之间,对已有数据不进行强制检查。ALTER TABLE 课程表 WITH CHECK ADD CONSTRAINT CK_课程表_1 CHECK (考核方式 in(考查,考试)ALTER TABLE 课程表 WITH NOCHECK ADD CONSTRAINT CK_课程表_2 CHECK(学分 BETWEEN 1 AND 6)WITH NOCHECK表示对已有数据不强制约束检查,WITH CHECK表示对已有数据进行约束检查。返回目录6.2 6.2 使用约束使用约束6.2.4 6.2.4 检查约束(检查约束(CHECKCHE
30、CK约束)约束)【例6.13】利用T-SQL命令删除【例6.12】设置的检查约束。ALTER TABLE dbo.课程表DROP CONSTRAINT CK_课程表_1,CK_课程表_2返回目录6.2 6.2 使用约束使用约束6.2.5 6.2.5 默认约束(默认约束(DEFAULTDEFAULT)默认约束是在用户未提供某些列的数据时,数据库系统为用户提供的默认值。从而简化应用程序代码和提高系统性能。表的每一列都可包含一个DEFAULT 定义。可以修改或删除现有的 DEFAULT 定义。默认值必须与 DEFAULT 定义适用的列的数据类型相一致,每一列只能定义一个默认值。6.2 6.2 使用约
31、束使用约束6.2.5 6.2.5 默认约束(默认约束(DEFAULTDEFAULT)1.用SQL Server Management Studio实现【例6.14】设置当对学生表的性别字段不输入值时,系统自动设置为“男”。1)打开SQL Server Management Studio,选择教务管理数据库中的“学生表”,单击右键,选择“修改”,进入表设计器。2)在表设计器中选中列性别,在下面的列属性设置中,将属性“默认值或绑定”的值设为男,如图6.6所示,设置完毕,单击关闭按钮,保存设置。将默认值添加到现有的列中,新的默认值应用于添加到该表的新数据行。在图6.6界面中,如果“默认值或绑定”删除
32、为空,则取消了默认值。返回目录6.2 6.2 使用约束使用约束6.2.5 6.2.5 默认约束(默认约束(DEFAULTDEFAULT)图 6.6 表设计器设置默认值返回目录6.2 6.2 使用约束使用约束6.2.5 6.2.5 默认约束(默认约束(DEFAULTDEFAULT)2.用T-SQL命令实现语法格式:CONSTRAINT 约束名 DEFAULT 常量表达式【例6.15】创建课程表,并设置学分默认值为2【例6.16】修改课程表,设置考核方式默认值为“考试”【例6.17】删除【例6.16】设置的默认约束返回目录6.2 6.2 使用约束使用约束6.2.5 6.2.5 默认约束(默认约束(
33、DEFAULTDEFAULT)【例6.15】创建课程表,并设置学分默认值为2。CREATE TABLE 课程表(课程号 char(6),课程名 varchar(20)NULL,学时 tinyint NULL,学分 tinyint DEFAULT 2,-设默认值为2 课程类型 nchar(5)NULL,课程性质 nchar(2)NULL,考核方式 nchar(2)NULL,学期 char(1)NULL,备注 varchar(200)NULL)返回目录6.2 6.2 使用约束使用约束6.2.5 6.2.5 默认约束(默认约束(DEFAULTDEFAULT)【例6.16】修改课程表,设置考核方式默认
34、值为“考试”ALTER TABLE 课程表ADD CONSTRAINT DF_课程表_考核 DEFAULT(考试)FOR 考核方式“FOR 列名”子句指明为哪列设置默认值,不能省略。但是在列定义后直接写默认值,则可以省略。【例6.17】删除【例6.16】设置的默认约束。ALTER TABLE 课程表DROP CONSTRAINT DF_课程表_考核返回目录6.2 6.2 使用约束使用约束6.2.6 6.2.6 外键约束外键约束 外键约束强制实现参照完整性。外键约束定义一个列,该列引用同一个表或另外一个表中已有的 PRIMARY KEY 约束或 UNIQUE 约束。外键约束可作为表定义的一部分在
35、创建表时创建,也可向现有表添加 FOREIGN KEY 约束。一个表可以有多个 FOREIGN KEY 约束。返回目录6.2 6.2 使用约束使用约束6.2.6 6.2.6 外键约束外键约束1.用SQL Server Management Studio实现【例6.18】设置选课表的课程号为外键,引用课程表的课程号字段。1)打开SQL Server Management Studio,选择教务管理数据库中的“选课表”,单击右键,选择“修改”,进入表设计器。2)在表设计器单击右键,选择“关系”或单击工具栏上的“关系”按钮,出现“外键关系”对话框,如图6.7所示。返回目录6.2 6.2 使用约束使用
36、约束6.2.6 6.2.6 外键约束外键约束图 6.7 外键关系对话框返回目录6.2 6.2 使用约束使用约束6.2.6 6.2.6 外键约束外键约束3)单击“表和列规范”属性对应的设置按钮,出现“表和列”对话框如图6.8所示。返回目录图 6.8 表和列对话框6.2 6.2 使用约束使用约束6.2.6 6.2.6 外键约束外键约束4)选择主键表为课程表,主键为课程号,选择选课表的课程号为外键,单击“确定”按钮,返回到“外键关系”对话框,设置关系名称,其他选项根据要求设置,通常选默认值即可,设置完毕单击关闭按钮,保存设置。返回目录6.2 6.2 使用约束使用约束6.2.6 6.2.6 外键约束外
37、键约束2.用T-SQL 命令实现命令格式:CONSTRAINT 约束名 FOREIGN KEY(列名)REFERENCES 被引用表(列名)ON DELETE CASCADE|ON UPDATE CASECADE 说明:ON DELETE CASCADE 表示级联删除,当在主键表中删除被引用行时,外键表中的引用行也一起被删除。ON UPDATE CASECADE表示级联更新,当在主键表中更新被引用行时,外键表中的引用行也一起被更新。返回目录6.2 6.2 使用约束使用约束6.2.6 6.2.6 外键约束外键约束【例6.19】创建选课表,设置选课表的课程号为外键,引用课程表的课程号字段。【例6.
38、20】修改选课表,设置选课表的学号为外键,引用学生表的学号字段。返回目录6.2 6.2 使用约束使用约束6.2.6 6.2.6 外键约束外键约束【例6.19】创建选课表,设置选课表的课程号为外键,引用课程表的课程号字段。CREATE TABLE 选课表(学号 char(11),课程号 char(6)REFERENCES 课程表(课程号)ON UPDATE CASCADE,成绩 numeric(5,1),)返回目录6.2 6.2 使用约束使用约束6.2.6 6.2.6 外键约束外键约束【例6.20】修改选课表,设置选课表的学号为外键,引用学生表的学号字段。ALTER TABLE 选课表 WITH
39、 CHECK ADD CONSTRAINT FK_选课表_学生表 FOREIGN KEY(学号)REFERENCES 学生表(学号)ON UPDATE CASCADE 返回目录6.2 6.2 使用约束使用约束6.2.6 6.2.6 外键约束外键约束 设置外键时,被引用表(即主键表)必须设置了主键或唯一键,且类型和宽度必须和外键一致,但名称可以不同。设置了主外键关系后,数据表的关系通过关系图可以一目了然,如图6.9所示。返回目录6.2 6.2 使用约束使用约束6.2.6 6.2.6 外键约束外键约束图 6.9 数据库库关系图返回目录6.2 6.2 使用约束使用约束6.2.6 6.2.6 外键约束
40、外键约束 数据库库关系图可以通过SQL Server Management Studio建立,在对象资源管理器中展开数据库“教务管理数据库”,选择“数据库关系图”,单击右键,选择“新建数据库关系图”,接下来添加建立关系的表,即可看到关系,如果主外键关系没有设置,也可以在这里设置。返回目录6.3 6.3 使用默认使用默认 默认值对象和表列的默认值的功能几乎一致。但默认值对象是不依附于表的数据对象,默认值对象的作用范围可以在整个数据库。它既可以被绑定到一个或多个列上,还可以绑定到用户自定义数据类型上。默认值对象的应用首先是创建默认,然后将其绑定到指定列或数据类型上。当取消默认时,可以解除绑定,如果
41、默认不再有用时可以删除。但表列的默认值在表结构设计或修改时建立或删除,随表的删除也消失。返回目录6.3 6.3 使用默认使用默认6.3.1 6.3.1 创建默认创建默认创建默认只能通过T-SQL命令实现。需使用CREATE DAFAULT命令。命令格式:CREATE DAFAULT 默认对象名 AS 常量表达式默认对象名必须符合标识符命名规则。常量表达式是指只包含常量值的表达式(不能包含任何列或其他数据库对象的名称)。可以使用任何常量、内置函数或数学表达式。返回目录6.3 6.3 使用默认使用默认6.3.1 6.3.1 创建默认创建默认 【例6.21】利用T-SQL 创建默认对象,默认值为“共
42、青团员”。CREATE DEFAULT DF_政治面貌 AS 共青团员 返回目录6.3 6.3 使用默认使用默认6.3.26.3.2 绑定默认绑定默认 默认值对象创建之后,需要将其绑定到列上或用户定义的数据类型上才能起作用。当向绑定了默认的列或使用绑定默认的用户定义数据类型的所有列插入或更新数据时,新的数据必须符合规则。本节例题做完后要进行数据插入或修改来验证默认值的作用。返回目录6.3 6.3 使用默认使用默认6.3.26.3.2 绑定默认绑定默认1.用SQL Server Management Studio实现【例6.22】将【例6.21】创建的默认对象绑定到列,方法如下:1)打开SQL
43、Server Management Studio,选择数据库中要绑定默认的表“学生表”,单击右键,选择“修改”,进入表设计器。2)选中要绑定的列“政治面貌”,在列属性下的“默认值或绑定列”对应设置下拉列表中选择默认值对象DF_政治面貌。如图6.10所示。3)设置完毕单击关闭按钮,保存设置。返回目录6.3 6.3 使用默认使用默认6.3.26.3.2 绑定默认绑定默认如果是绑定到用户定义数据类型,方法如下:1)展开数据库,展开“可编程性”/“类型”/“用户定义数据类型”,如图6.11所示。2)单击右键,如果类型不存在,选择“新建用户定义数据类型”,如果类型已经创建,可选择“属性”进入“用户定义数
44、据类型”界面,如图6.12所示。3)在“名称”文本框输入用户定义数据类型的名称,单击“默认值”右边的小按钮,进入“选择对象”界面,如图6.13所示。返回目录6.3 6.3 使用默认使用默认6.3.26.3.2 绑定默认绑定默认4)单击“浏览”按钮,进入“查找对象”界面,如图6.14所示。选择默认值对象。5)单击“确定”按钮返回图6.13,单击“确定”返回图6.12,再单击“确定”设置完毕。当定义了绑定有默认对象的用户定义数据类型后,在创建表时,某个列应用了该类型,默认值也将生效。返回目录6.3 6.3 使用默认使用默认6.3.26.3.2 绑定默认绑定默认图 6.10 绑定默认值对象到列返回目
45、录6.3 6.3 使用默认使用默认6.3.26.3.2 绑定默认绑定默认图 6.11 绑定默认值对象到用户定义数据类型返回目录6.3 6.3 使用默认使用默认6.3.26.3.2 绑定默认绑定默认图 6.12 用户定义数据类型界面返回目录6.3 6.3 使用默认使用默认6.3.26.3.2 绑定默认绑定默认图 6.13 选择对象界面返回目录6.3 6.3 使用默认使用默认6.3.26.3.2 绑定默认绑定默认图 6.14 查找对象界面返回目录6.3 6.3 使用默认使用默认6.3.26.3.2 绑定默认绑定默认2.用T-SQL命令实现 用T-SQL命令实现绑定默认值对象要用到系统存储过程SP_
46、BINDEFAULT。命令格式:命令格式:EXEC SP_BINDEFAULT 默认值对象名,对象名,futureonly_flag返回目录6.3 6.3 使用默认使用默认6.3.26.3.2 绑定默认绑定默认【例6.23】将【例6.21】创建的默认对象绑定到学生表的政治面貌列上。EXEC SP_BINDEFAULT DF_政治面貌,学生表.政治面貌 返回目录6.3 6.3 使用默认使用默认6.3.26.3.2 绑定默认绑定默认默认值对象名和对象名一定要用单引号引住。默认值对象必须和绑定的对象的数据类型兼容。对象名可以是列,也可以是用户定义数据类型。如果是列的话一定要指明是哪个表的哪个列,格式
47、为表名.列名。futureonly_flag只有在绑定到用户定义数据类型时才使用。它的默认值为NULL,当参数设置为futureonly时,只对新插入的数据行应用默认对象。返回目录6.3 6.3 使用默认使用默认6.3.3 6.3.3 解除绑定解除绑定1.用SQL Server Management Studio实现 解除绑定的方法,同绑定的操作。如果是解除绑定列,方法如下:1)打开SQL Server Management Studio,选择数据库中要绑定默认的表“学生表”,单击右键,选择“修改”,进入表设计器,如图6.10所示。2)选中要解除绑定的列,在列属性下的“默认值或绑定列”对应设置
48、下删除择默认值对象。单击关闭按钮,保存设置。返回目录6.3 6.3 使用默认使用默认6.3.3 6.3.3 解除绑定解除绑定如果是解除绑定到用户定义数据类型的默认值对象,方法如下:1)展开数据库,展开“可编程性”/“类型”/“用户定义数据类型”,选中解绑的类型,如图6.11所示。2)单击右键选择“属性”进入“用户定义数据类型”界面,如图6.12所示,删除默认值对象。单击“确定”按钮。返回目录6.3 6.3 使用默认使用默认6.3.3 6.3.3 解除绑定解除绑定2.用T-SQL命令实现 用T-SQL命令实现解除绑定要用到系统存储过程SP_UNBINDEFAULT。命令格式:EXEC SP_UN
49、BINDEFAULT 对象名,futureonly_flag返回目录6.3 6.3 使用默认使用默认6.3.3 6.3.3 解除绑定解除绑定【例6.24】解除【例6.23】绑定到学生表的政治面貌列上的默认对象。EXEC SP_UNBINDEFAULT 学生表.政治面貌返回目录6.3 6.3 使用默认使用默认6.3.3 6.3.3 解除绑定解除绑定同绑定一样,对象名一定要用单引号引住。对象名可以是列,也可以是用户定义数据类型。如果是列,格式为表名.列名。如果该默认对象绑定到多个列,只有解除绑定的列,默认值失效。futureonly_flag只有在绑定到用户定义数据类型时才使用。将对象名换成用户定
50、义数据类型名,则解除了到数据类型的绑定,所有定义为这个类型的列的默认值也不再起作用。返回目录6.3 6.3 使用默认使用默认6.3.46.3.4 删除默认删除默认1.用SQL Server Management Studio实现方法如下:1)打开SQL Server Management Studio,展开数据库,展开“可编程性”/“默认值”,选中要删除的默认值对象名。2)单击右键选择“删除”进入“删除对象”界面,单击“确定”按钮即可。返回目录6.3 6.3 使用默认使用默认6.3.46.3.4 删除默认删除默认2.用T-SQL命令实现 用T-SQL命令实现删除默认要用命令DROP DEFAU
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。