数据库完整教学

上传人:仙*** 文档编号:195548254 上传时间:2023-03-18 格式:PPT 页数:63 大小:155.50KB
收藏 版权申诉 举报 下载
数据库完整教学_第1页
第1页 / 共63页
数据库完整教学_第2页
第2页 / 共63页
数据库完整教学_第3页
第3页 / 共63页
资源描述:

《数据库完整教学》由会员分享,可在线阅读,更多相关《数据库完整教学(63页珍藏版)》请在装配图网上搜索。

1、第五章第五章 数据库完整性数据库完整性数据库完整性数据库完整性v 数据是数据库的核心,数据的正确和完整与否将直接影响数据库的使用。v 数据的完整性完整性和安全性安全性是两个不同概念;数据的安全性保护数据库防止恶意的破坏和非法的存取防范对象:非法用户和非法操作 数据的完整性防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据防范对象:不合语义的、不正确的数据本次课内容本次课内容v数据完整性概述v在SQL Server 2005中实现数据完整性v其他相关知识触发器v1、DBMS必须能够提供 提供定义完整性约束条件的机制提供定义完整性约束条件的机制 完整性约束条件=完整性规则,由SQ

2、L的ddl语句来实现;提供完整性检查的机制提供完整性检查的机制 检查数据是否满足完整性约束条件的机制;违约处理违约处理 若用户操作违反完整性约束条件,采取一定的动作,如拒绝执行(NO ACTION)、级联执行或其他操作;一、数据库完整性概述一、数据库完整性概述v2、数据库完整性约束机制分类完整性约束条件作用的对象有关系、元组、列三种;可分为:实体完整性实体完整性:实体完整性是为了保证表中的数据唯一;参照完整性:参照完整性:参照完整性用于确保相关联的表间的数据应保持一致,避免因一个表的记录修改,造成另一个表的内容变为无效的值一般来说,参照完整性是通过外键和主键来维护的;域完整性:域完整性:域完整

3、性可以保证数据的取值在有效的范围内;用户定义完整性:用户定义完整性:由用户自行定义的,不同于前面种的完整性,也可以说一种强制数据定义;1)实体完整性)实体完整性v 实体(Entity):是数据逻辑模型中的一个概念。现实世界是一组实体的基本对象和这些对象的联系(Relation)构成的。在数据库中,我们可以理解一条记录就是一个实体。v 实体完整性:在现实世界中,任何一个实体都有区别于其他实任何一个实体都有区别于其他实体的特征体的特征,即在数据库中,所有的记录都应该有惟一的标识,这就是实体完整性的含义(规则:实体完整性规则)。v 常见的实体完整性机制包括:主键(Primary Key);惟一码(U

4、nique);2)参照完整性)参照完整性v 参照完整性是指在两个表的主键和外键之间数据的完整性,其含义包括:参照完整性保证被参照表和参照表之间数据的一致性;可以防止数据丢失或者无意义的数据;可以禁止在从表中插入被参照表中不存在的关键字的记录。v 参照完整性的常见实现机制包括:外键(Foreign Key)、检查(Check)、触发器(Trigger);存储过程(Stored Procedure)v 在输入或删除记录时,可以用来保持所有表之间定义的关系,以确保键值在所有表中一致。v 关系模型的参照完整性定义 在CREATE TABLE中用FOREIGN KEY短语定义哪些列为外码 用REFERE

5、NCES短语指明这些外码参照哪些表的主码3)域完整性)域完整性v 域:指列(字段),所以域完整性就是指列的完整性;v 域完整性要求列(字段)的数据具有正确的数据类型、格式和有效的数值范围。v 域完整性的常见实现机制包括:默认值(Default)检查(Check)数据类型(Data type)规则(Rule)4)用户自定义完整性)用户自定义完整性v 用户定义的完整性就是针对某一具体应用的数据必须满足的语义要求;可直接由RDBMS提供,而不必由应用程序承担;系统将实现数据完整性的要求直接定义在表上或列上。v 常见的实现机制包括:规则(Rule)、创建数据表时的所有约束(Constraint)、触发

6、器(Trigger)、存储过程(Stored Produre);二、在二、在SQL Server 2005中实现数据完整性中实现数据完整性vSQL Server 2005提供了完善的数据完整性机制,主要包括约束、默认值和规则3类;创建及管理约束及约束对象 默认值约束及默认值对象 创建及管理规则对象1、创建及管理约束及约束对象、创建及管理约束及约束对象v 主键Primary key约束v 惟一值Unique约束v 外键Foreign key约束v 检查Check约束1)创建及删除主键约束及惟一值约束)创建及删除主键约束及惟一值约束v单属性构成的码的两种说明方法单属性构成的码的两种说明方法:定义为

7、列级约束条件,定义为表级约束条件v多个属性构成的码只有一种说明方法多个属性构成的码只有一种说明方法:定义为表级约束条件创建约束方式:v创建表时同时创建primary key约束或unique约束I.修改表时同时创建primary key约束或unique约束i)创建表时同时创建)创建表时同时创建primary key约束或约束或unique约束约束v 语法结构:CREATE TABLE table_name(column_name data_type (NULL|NOT NULL)CONSTRAINT constraint_name PRIMARY KEY|unique,.n例例1:定义数据表

8、:定义数据表student时,为学号时,为学号sno字段创建主键约束,对字段创建主键约束,对姓名姓名sname字段定义惟一值约束;字段定义惟一值约束;方法1:在列级定义主码Use stuCREATE TABLE student(Sno char(9)constraint sno_pk primary key,Sname char(8)constraint sname_uk unique,Ssex char(2),Sage smallint,Sdept varchar(20))方法2:在表级定义主码CREATE TABLE Student (Sno CHAR(9),Sname CHAR(20),

9、Ssex CHAR(2),Sage SMALLINT,Sdept CHAR(20),PRIMARY KEY(Sno)实体完整性检查:v 插入或对主码列进行更新操作时,RDBMS按照实体完整性规则自动进行检查。包括:1.检查主码值是否唯一,如果不唯一则拒绝插入或修改 2.检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改检查方法:全表扫描、索引ii)通过修改表时同时创建)通过修改表时同时创建primary key约束或约束或unique约束约束v 语法格式:ALTER TABLE table_nameADD CONSTRAINT constraint_name primary key|u

10、nique(column,.n)例例1:对数据表:对数据表student学号学号sno字段添加主键约束,对学生姓名字段添加主键约束,对学生姓名添加惟一值约束;添加惟一值约束;Alter table studentAdd constraint sno_pk primary key snoAlter table studentAdd constraint sname_uk unique sname删除删除primary key约束或约束或unique约束约束v 语法格式:ALTER TABLE table_nameDROP CONSTRAINT constraint_name,.n例例1:删除:删

11、除student中的主键约束和惟一值约束中的主键约束和惟一值约束ALTER TABLE studentDrop constraint sno_pk,sname_ukv 查看主键约束的定义文本EXEC sp_helptext v 查看表中主键约束EXEC sp_helpconstraint v 查看数据库中所有主键约束SELECT name from sysobjects WHERE type=K备注:K:primary key或unique约束;F:foreign keyC:check约束;D:默认值;R:规则;TR:触发器;U:用户表;V:视图2)创建及管理外键约束)创建及管理外键约束v 对

12、于两个相关联的表(主表与从表)进行数据插入和删除时,通过参照完整性保证他们之间数据的一致性。v 利用Foreign Key定义从表的外码,Primary Key或者Unique定义主表中的主码或惟一码(不允许为空),可实现主表与从表之间的参照完整性。v 定义表间参照关系:先定义主表主码(或惟一码),再对从表定义外码约束。可能破坏参照完整性的情况及违约处理被参照表(例如Student)参照表(例如SC)违约处理可能破坏参照完整性 插入元组拒绝可能破坏参照完整性 修改外码值拒绝删除元组 可能破坏参照完整性拒绝/级连删除/设置为空值修改主码值 可能破坏参照完整性拒绝/级连修改/设置为空值v 当主码外

13、码发生不一致时,系统可采取以下策略:1.拒绝(NO ACTION)执行 默认策略 2.级联(CASCADE)操作 3.设置为空值(SET-NULL)对于参照完整性,除了应该定义外码,还应定义外码列是否允许空值i)创建表时同时定义Foreign key约束v 语法格式:CREATE TABLE table_name(column_name data_type FOREIGN KEYREFERNCES ref_table(ref_column)on delete CASCADE|no action -cascade表示主从表删除时一致,进行级联删除-no action 表示回滚主表的删除操作,为默

14、认设置 on update CASCADE|no action-主从表更新时一致,.n)-n表示可定义多个字段例例1:在数据库:在数据库stu中创建主表中创建主表student和和course,主键分别为,主键分别为sno和和cno,创建从表,创建从表sc,为外码,与数据表,为外码,与数据表student主键对应,当主键对应,当对主表进行更新或删除操作时,对从表采用级联操作;为外码,对主表进行更新或删除操作时,对从表采用级联操作;为外码,与数据表与数据表course主键对应,当对主表进行更新或删除操作时,主键对应,当对主表进行更新或删除操作时,对从表采用对从表采用NO Action方式。方式。

15、Use stuCreate table student(sno char(9)primary key,sname)Create table course(cno char(4)primary key,sname)Create table sc(sno char(9)foreign key references student(sno)on delete cascade on update cascade,cno char(4)foreign key references course(cno)on delete no action on update no action,Grade small

16、int)ii)通过修改表定义Foreign key约束v 语法格式:ALTER TABLE table_nameADD constraint constraint_nameFOREIGN KEY(column,n)REFERNCES ref_table(ref_column,n)on delete CASCADE|no action on update CASCADE|no action例例1:假设数据库:假设数据库stu中中student和和course为主表,主键分别为为主表,主键分别为sno和和cno,sc为从表,将定义为外码。为从表,将定义为外码。Use stuAlter table

17、scADD constraint sc_fk foreign key sno references student(sno)v iii)删除表间的参照关系删除表间的参照关系,删除从表的外码约束即可;语法格式:Alter table table_nameDrop constraint constraint_name,niv)查看外键约束sp_helptext、sp_helpconstraint、select name from sysobjects where type=F3)创建及删除检查约束)创建及删除检查约束v 对插入列中的值进行限制,以强制域的完整性;v 该约束在执行INSERT语句或U

18、PDATE时起作用;v 使用该约束可实现当用户在向表中插入或更新数据时,由SQL Server检查新行中的带有该约束的列值使其必须满足约束条件。v CHECK约束作用域 单列:列级CHECK约束 多列:表级CHECK约束i)创建数据表时创建检查)创建数据表时创建检查check约束约束语法格式:CREATE TABLE table_name(column_name data_type (NULL|NOT NULL)CONSTRAINT check_name CHECK(logical_expression),n)例例1:定义:定义student表,并限定表,并限定ssex只允许取只允许取男男或或

19、女女;CREATE TABLE student(Sno char(9)Primary Key,Sname char(8),Ssex char(2)check(ssex in(男,女),Sage smallint ,Sdept varchar(20))v 例例2:在定义:在定义Student中,要求男生的年龄在中,要求男生的年龄在1525岁之间,女生的岁之间,女生的年龄在年龄在1524岁之间;岁之间;CREATE TABLE Student (Sno char(9)Primary Key,Sname char(8),ssex char(2),Sage smallint,Sdept varchar

20、(20),CHECK(SAGE=15 AND (SSEX=男 AND SAGE=25)OR (SSEX=女 AND SAGE=0 and sage=100)例例2:在表:在表student的列的列sno上添加一个上添加一个CHECK约束,要求学号必约束,要求学号必须由须由9个数字字符组成,并且不等于个数字字符组成,并且不等于0000000000.Alter table studentAdd CONSTRAINT sno_ckCheck(sno like 0-9 0-9 0-9 0-9 0-9 0-9 0-9 0-9 0-9 and sno000000000)iii)查看约束的定义信息)查看约束

21、的定义信息v 查看约束的定义文本EXEC sp_helptext v 查看表中约束EXEC sp_helpconstraint v 查看数据库中所有约束SELECT name from sysobjects WHERE type=C例1:查看表student上约束sno_ck的定义文本USE stuEXEC sp_helptext sno_ckGo例2:查看数据库stu中所有的check约束 USE stu SELECT name from sysobjects WHERE type=Civ)删除检查check约束语法格式:ALTER TABLE table_nameDROP CONSTRAI

22、NT check_name例1:删除数据表student中sno字段的check约束ALTER TABLE studentDROP CONSTRAINT sno_ck2、默认值约束、默认值约束v 默认值约束的作用:就是当用户没有为定义为default约束的字段输入数据时,由default 约束提供默认的数据。v 默认值对象:作为一种单独的数据库对象,它是独立于表的,删除表并不能删除默认值,而是需要使用DROP DEFAULT命令才能删除。v 对于某些字段,可在程序中指定默认值,以方便用户,一个字段默认值的建立可通过如下两种方式实现:在定义表或修改表时,定义默认值约束;先定义默认值对象,然后将对

23、象绑定到表的相应字段;1)在表中定义及删除默认值约束)在表中定义及删除默认值约束v默认值约束的定义 1)定义表时定义字段的默认值约束 2)修改表时添加一个字段的同时定义相应约束 3)对表中指定的列定义默认值v默认值约束的删除i)定义表时定义字段的默认值约束)定义表时定义字段的默认值约束v 定义默认值约束语法格式:Create table table_name(column_name datatype not null/null Constraint constraint_name DEFAULT(constraint_expression),n-参数n表示可定义多个数据字段)-定义列名、数据类

24、型、是否空值及默认值约束例1:定义数据表student中字段ssex的默认值为女;CREATE TABLE Student (Sno CHAR(9)PRIMARY KEY,Sname CHAR(8)NOT NULL,Ssex CHAR(2)default(女),Sage SMALLINT,Sdept CHAR(20)ii)修改表时添加一个字段的同时定义相应约束)修改表时添加一个字段的同时定义相应约束v 修改默认值约束语法格式:Alter table table_name(ADD column column_name datatype not null|nullConstraint constr

25、aint_name -指定约束名 DEFAULT(constraint_expression)with values -默认值约束表达式-with values 仅用于在对表添加新字段的情况下)例2:在数据表student中添加字段入学日期ruxue_date,默认值为当前日期;Alter table studentAdd ruxue_date smalldatetime null Constraint date Default getdate()with valuesiii)对表中指定的列定义默认值约束)对表中指定的列定义默认值约束v 语法格式:Alter table table_name(

26、ADD Constraint constraint_name -指定约束名 DEFAULT constraint_expression -默认值约束表达式For column)例3:为数据表sc中字段grade添加默认值为0;Alter table scAdd Constraint grade_defaultDefault 0For gradeiv)默认值约束的删除)默认值约束的删除v 语法格式:Alter table table_nameDROP Constraint constraint_name -删除指定约束名例1:删除表sc中字段grade的默认值;Alter table scDRO

27、P Constraint grade_default三、其他知识三、其他知识v规则v触发器1、创建及管理规则对象、创建及管理规则对象v 规则:对录入数据列中的数据所实施的完整性约束条件,它指定了插入到数据列中的可能值。v 规则是SQL Server 2005数据库中独立于表和视图的数据对象,与其作用的表是独立的,删除表时不会删除规则。v 规则就相当于数据表的数据验收员,当插入或修改的数据放入数据表时,它就检查数据是否符合要求,符合要求的放入数据表,不符合的拒之门外。这样就保证了放入数据表的数据是正确的。v 如果列同时有与之相关联的默认值和规则,则默认值必须在规则定义的范围内。与规则冲突的默认值

28、永远不能被插入。1)定义规则对象)定义规则对象v 规则对象的使用方法与默认值对象使用步骤类型;定义规则对象 将规则对象绑定到列或用户自定义类型v 定义规则对象的语法结构CREATE RULE rule AS condition_expressionv 将规则对象绑定到自定义类型或列语法格式:sp_bindrule rulename=rule,objname=object_name,futureonly=futureonly_flag 例例1:创建一个规则,用于指定性别为:创建一个规则,用于指定性别为男男或者或者女女,并绑定,并绑定到数据表到数据表student的的ssex字段。字段。CREAT

29、E RULE ssex_ruleAS sex=男 or sex=女EXEC sp_bindrule ssex_rule,例例2:创建一个规则,用于指定学号首位以:创建一个规则,用于指定学号首位以1-9开头,其他位以开头,其他位以0-9结尾,并绑定到数据表结尾,并绑定到数据表student的的sno字段。字段。CREATE RULE sno_ruleAS num like 1-90-90-9 0-9 0-9 0-9 0-9 0-9 0-9EXEC sp_bindrule sno_rule,2)删除规则对象)删除规则对象v 删除规则对象之前,首先应使用系统存储过程sp_unbindrule解除被绑

30、定对象与规则对象之间的绑定关系。解除规则绑定语法格式解除规则绑定语法格式:sp_unbindrule objname=object_name ,futureonly=futureonly_flag删除规则语法格式删除规则语法格式:DROP rule rule,n例1:解除规则对象sdept_rule与数据表student的sdept字段的绑定,然后删除规则对象sdept_rule;Use stuIf exists(select name from sysobjects where name=sdept_rule and type=R)BeginExec sp_unbindrule Drop r

31、ule sdept_ruleEnd v对比:约束:定义表中有效的数据,在事务处理前执行,性能较好;默认和规则:提供独立的可以与多个表联系的对象实现数据完整性,在事务处理前执行2、触发器、触发器v 触发器是一种特殊类型的存储过程,只要对它所保护的数据进行修改,它就会自动触发。触发器主要是通过事件进行触发而被执行的,而存储过程可以通过存储过程名称而被直接调用。v 一般情况下,对表数据的操作有插入、修改和删除,对数据的更新、插入及删除被视为数据修改事件。因而维护数据的触发器也可分为3种类型:insert,update和delete。一个触发器由三部分组成:v 事件事件。事件是指对数据库的插入、删除修

32、改等操作。触发器在这些事件发生时将开始工作。v 条件条件。触发器将测试条件是否成立。如果条件成立,就执行相应的动作,否则什么也不作。v 动作动作。如果触发器测试满足预定的条件,那么就由DBMS执行这些动作(即对数据库的操作)。1)定义触发器)定义触发器v 语法格式:CREATE TRIGGER ON FOR|AFTER|INSTEAD OF AS -AFTER用于说明触发器在指定操作都成功执行后触发,是默认设置;-INSTEAD OF指定用触发器中的操作代替触发语句的操作;-INSERT、DELETE、UPDATE;v 例例1:对于数据库:对于数据库stu,创建一个触发器,创建一个触发器upd

33、ate_student,当用,当用户试图向户试图向student表中添加或修改数据时,该触发器向客户端表中添加或修改数据时,该触发器向客户端显示一条显示一条“插入或更新了数据表插入或更新了数据表xs!”的消息的消息;USE stuIF EXISTS(SELECT name FROM sysobjectsWHERE name=update_student AND type=TR)DROP TRIGGER update_studentCreate trigger update_student ON student FOR INSERT,UPDATEAS PRINT 插入或更新了数据表student

34、!测试:向student表插入一条记录结果:客户端显示插入或更新了数据表student!v 例例2 2:对于数据库:对于数据库stustu,创建一个触发器,不允许对,创建一个触发器,不允许对studentstudent删删除或修改记录时,同时客户端显示除或修改记录时,同时客户端显示不允许增加或修改记录不允许增加或修改记录。CREATE TRIGGER student_tr1 ON studentINSTEAD OF DELETE,UPDATEAS PRINT 不允许增加或修改记录测试:测试:delete from student where sno=200815001执行结果:执行结果:说明:

35、说明:在表或视图上,每个 INSERT、UPDATE 或 DELETE 语句最多可以定义一个 INSTEAD OF 触发器。触发器中使用的特殊表触发器中使用的特殊表v inserted 逻辑表:当向表中插入数据时,INSERT触发器触发执行,新的记录插入到触发器表和inserted表中。v deleted逻辑表:用于保存已从表中删除的记录,当触发一个DELETE触发器时,被删除的记录存放到deleted逻辑表中。v Inserted 和 deleted 总是在内存中在内存中而不是在磁盘上,因为它们是逻辑表,而且通常很小。若要检索deleted、inserted 表中所有记录,可是用语句:sel

36、ect*from inserted deletedv 例例3 3:对于数据库:对于数据库stustu中的数据表中的数据表scsc,创建一个触发器,插,创建一个触发器,插入记录时,当字段入记录时,当字段gradegrade小于小于6060时,自动改为时,自动改为0 0;CREATE TRIGGER sc_grade ON scFOR insertAS beginupdate sc set grade=0 where grade60 and sno in(SELECT FROM inserted)end2)修改触发器)修改触发器v语法格式:Alter trigger trigger_name on(table|view)for delete,insert,update As sql_statement n 3)删除触发器)删除触发器v语法格式:DROP trigger trigger_name ,n小小 结结v数据完整性概述实体完整性;参照完整性域完整性;用户自定义完整性v在SQL Server 2005中实现数据完整性创建和管理约束Primary key约束;Unique约束;Foreign key约束;Check约束;创建和管理默认值约束v扩充知识(规则、触发器)

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!