资源预览内容
第1页 / 共52页
第2页 / 共52页
第3页 / 共52页
第4页 / 共52页
第5页 / 共52页
第6页 / 共52页
第7页 / 共52页
第8页 / 共52页
第9页 / 共52页
第10页 / 共52页
亲,该文档总共52页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第8章 数据库完整性 约束 8.1默认值8.2规则8.31数据库的完整性n数据库的完整性是指数据的正确性、有效 性和相容性,是为了防止数据库中存在不合 语义的数据,防止错误信息的输入与输出造 成无效操作或错误结果。完整性措施的防范 对象是不合语义的数据。n例:性别只能是“男”或“女”,学号必须唯一。n系统提供多种强制数据完整性的机制,保 证数据库中数据的质量。2数据完整性类型根据数据完整性措施所作用的数据库对象和范围不同,可 以将数据完整性进行分类。 完整性约束作用的对象:n关系(表):若干元组间,关系之间的联系的约束;n元组:元组中各个字段间的联系的约束;n列:列的类型、取值范围、精度、唯一性、为空性、默 认定义、CHECK约束、主键约束、外键约束。数据完整性约束分类:n实体(表)完整性n域(列)完整性n参照完整性(引用完整性)n用户自定义完整性31、实体完整性又称为行完整性。它把表中的每行都看作一个实体,要求所有行都具有唯一标识。实体完整 性作用对象是列,强制表的标识符列或主键的完 整性(在SQL Server中,可以通过建立 PRIMARY KEY约束、UNIQUE约束、 IDENTITY等措施来实施实体完整性)。例如,对“客户信息表”,客户编号就可以作为主键,每个客户的编号能够惟一地确定该客户对应的记录信 息,那么在输入数据时,则不能有相同客户编号的记录 存在,通过对客户编号这一字段建立主键约束,可实现“ 客户信息表”的实体完整性。 42、域完整性域完整性又称为列完整性。它要求表中指定列的数据具有正确的数据类型(通过定义数据类型)、 数据格式(通过CHECK约束和规则实现)和有效的数据 范围(通过FOREIGN KEY约束、 CHECK约束、NOT NULL、DEFAULT定义和规则实现)。例如对于课程表“COURSE1”,学生的某门 课程的学分应在10分以内,为了对学分这一数据项输入的数据进行限制,可以定义该表的学分字 段的约束条件。5例1 定义“COURSE1”以及学分字段的约束条件CREATE TABLE COURSE1 (课程号 CHAR(6) NOT NULL,课程名 CHAR(18) NOT NULL UNIQUE,学分 TINYINT CHECK(学分=0 and 学分 =0)21例5n使用CREATE TABLE语句创建“客户”表,同时创建检 查约束,定义“邮政编码”列的值是由6位数字组成的字符 串。CREATE TABLE 客户(记录编号 int IDENTITY(1,1),客户单位 varchar(50) NOT NULL,地址 varchar(100) NOT NULL,邮政编码 varchar(10) NOT NULL,CONSTRAINT PK_客户 PRIMARY KEY (记录编号),CONSTRAINT IX_客户 UNIQUE (客户单位),CONSTRAINT CK_客户 CHECK (邮政编码 LIKE 0- 90-90-90-90-9 0-9)22例6n使用CREATE TABLE语句创建“联系人”表,同 时创建检查约束,定义“性别”列的值只能是“男”或 “女”。CREATE TABLE 联系人(记录编号 int IDENTITY(1,1),姓名 varchar(50) NOT NULL,性别 char(2) NOT NULL,电话 varchar(50) NOT NULL,CONSTRAINT PK_联系人 PRIMARY KEY (记录编号 ),CONSTRAINT IX_联系人 UNIQUE (姓名),CONSTRAINT CK_联系人 CHECK (性别 IN (男, 女 )可以省略,按 系统默认命名238.1.4 外部键约束 n外部键约束是用于建立两个表之间的一列或多 列之间的联系。通过将当前表中的某一列或某几 列关联到另一个表的主键列,可创建两个表之间 的连接。当前表中的列就成为外部键。n外部键约束可以确保添加到外部键表中的任何 行的外部键值在主表中都存在相应主键值,以保 证数据的参照完整性。n两种创建外部键约束的方法 使用企业管理器创建外部键约束 使用T-SQL语句创建外部键约束24例7 使用企业管理器创建外部键约束n在“XJGL”数据库中,将“STUDENT”表的“ SNO”列设置为主键,与“SC”表中的“SNO”列与 “STUDENT”表的“ SNO”对应,在企业管理器中为它们创建外键约束。n在企业管理器中右击“SC”表,在弹出菜单中选择 “设计表”,打开表设计器。n在设计表对话框中右击鼠标,在弹出菜单中选择“ 关系”,打开“属性”对话框,如下页图所示,在该对话框中可以查看和管理关系。2526使用T-SQL语句创建外部键约束n语法: CONSTRAINT 约束名FOREIGN KEY (列名1 , 列名2, ., 列名n)REFERENCES 关联表 (关联列名1, 关联列名2, ., 关联列名n)如果不指定约束名,则系统会自动分配一个名称 。FOREIGN KEY关键字指定当前创建的约束类型 为外部键约束。REFERENCES关键字指定与当前创建或修改的表相关联的表和列。27create table STUDENT1(sno char(4) primary key,sdeptname char(10)GO create table SC1(sno char(4),cno char(8), FOREIGN KEY(sno) REFERENCES student1(sno) go例8 使用SQL语句创建外部键约束28级联删除和修改(cascade)create table STUDENT2(sno char(4) primary key,sdeptname char(10) GOcreate table SC2(sno char(4),cno char(8), FOREIGN KEY(sno) REFERENCES student2(sno) on delete cascade) -on delete cascade 级联删除 goinsert student2 values(0001,a) insert student2 values(0002,b) insert sc2 values(0001,1) insert sc2 values(0001,2) insert sc2 values(0002,2) select * from student2 select * from sc2 go delete from student2 where sno=0001 go select * from student2 select * from sc229使用约束的注意事项n不需要删除和重建表就可以创建、修改和删除 约束n必须在应用程序和事务处理中建立错误检查逻 辑,以检测是否违反了约束n向表添加约束时,SQL Server将验证现有数据n在创建约束时应该对其命名308.2 默认值 n默认值可以为指定列定义一个默认值。在输入 数据时,如果没有输入该列的值,则将该列的值 设置为默认值。n有两种方法使用默认值n在创建表时,指定默认值(企业管理器和 SQL语句)n使用CREATE DEFAULT 语句创建默认对象31在创建表时,指定默认值(SQL语句)例9: CREATE TABLE AAA(A1 CHAR(4) DEFAULT 1111)在ALTER TABLE语句中,可以使用 CONSTRAINT关键字定义默认约束,基本语法 如下: CONSTRAINT 约束名DEFAULT 约束表达式 FOR 列名 如果不指定约束名,则系统会自动分配一个名称 。32例10:n使用CREATE TABLE语句创建“测试”表,同时 定义“记录名称”列的默认约束为“默认名称”。 CREATE TABLE 测试( 记录编号 int,记录名称 varchar(50),PRIMARY KEY (记录编号),UNIQUE (记录名称) ) ALTER TABLE 测试ADD CONSTRAINT DE_测试 DEFAULT 默认名称 FOR 记录名称338.2.2 使用默认对象默认对象是单独存储的,删除表时DEFAULT约束 会自动删除,但默认对象不会被删除.默认对象创 建后,需要绑定到某列或用户自定义数据类型上. 1.创建 2.绑定 3.重命名 4.解除绑定 5.删除341.创建n企业管理器中创建nSQL语句创建例11: CREATE DEFAULT 性别值 AS 男352.绑定将默认对象“性别值”绑定到STUDENT表的SSEX字段n企业管理器中绑定nSQL语句创建例12: EXEC SP_BINDEFAULT 性别值 ,STUDENT.SSEX363.重命名n企业管理器中重命名nSQL语句创建例13: EXEC SP_RENAME 性别值,性别默认值 374.解除绑定n企业管理器中解除绑定nSQL语句创建例14: EXEC SP_UNBINDEFAULT STUDENT.SSEX 385.删除n企业管理器中删除nSQL语句创建例15: DROP DEFAULT 性别默认值398.3 规则 n规则的概念n创建规则 n绑定规则 n解除绑定规则 n删除规则 401.规则的概念n规则(Rules)是一种SQL Server对象,它用于 执行一些与CHECK约束相同的功能。CHECK约束比规则更简明,一个列只能应用一个规则,但 是却可以应用多个CHECK约束。 411. 创建规则 n在企业管理器中的左侧窗格中展开指定的数据 库,选择“规则”项,可以在右侧窗格中查看当前数据库的规则对象。42n右键单击右侧窗格的空白区域,在弹出菜单中 选择“新建规则”,打开“规则属性”对话框。43例16:n在企业管理器中创建规则“性别规则”,指定变 量SSEX的取值只能为男或 女 。性别规则Ssex IN (男, 女)44例17: 使用CREATE RULE语句创建规则 n使用CREATE RULE语句创建规则“分数规则”,指定变量score的范围是0100。CREATE RULE 分数规则AS score BETWEEN 0 AND 100452. 绑定规则n绑定规则是指将已经存在的规则应用到列或用户自定义的数据类型中。n两种绑定规则的方法 使用企业管理器绑定规则 使用系统存储过程绑定规则46使用企业管理器绑定规则n在企业管理器中,将创建的规则“性别规则”绑定 到表“STUDENT”表的“SSEX”列。n在企业管理器中用鼠标右键单击“性别规则”对象 ,在弹出的快捷菜单中选择“属性”,打开“性别规 则” 属性对话框:47例18:使用企业管理器绑定规则48使用系统存储过程绑定规则n使用存储过程sp_bindrule也可以将规则绑定到列或用户自定义的数据类型。sp_bindrule rulename = 规则名, objname = 对象名49例19:n使用存储过程sp_bindrule将创建的“分数规则”绑定到表“SC”的“GRADE”列。EXEC sp_bindrule 分数规则,SC.GRADE 执行的结果如下:已将规则绑定到表的列上。503. 解除绑定规则 n使用“将规则绑定到列”对话框中n使用存储过程sp_unbindrule解除规则的绑定:EXEC sp_unbindrule SC.GRADE514. 删除规则n在企业管理器中,右键单击指定的规则,在弹出菜单中选择“删除”按钮,可以删除指定的规则对象。n使用DROP RULE语句也可以从当前数据库中删除一个或多个规则: DROP RULE 分数规则5
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号