数据库完整性控制_第1页
数据库完整性控制_第2页
数据库完整性控制_第3页
数据库完整性控制_第4页
数据库完整性控制_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第十二章数据库完整性控制计算机基础教学部本章内容12.1约束12.2默认值12.3规则12.4事务处理12.5数据的锁定数据完整性数据完整性问题的提出数据库中的数据是从外界输入的,由于种种原因,会发生输入数据无效或错误。为了保证输入的数据正确、符合规定,提出数据完整性问题。数据完整性问题的解决SQLServer2000中可以通过各种约束、默认值、规则等数据库对象来保证数据的完整性。数据完整性包括实体完整性、域完整性、参照完整性和用户自定义完整性。12.1约束约束(Constraint)是SQLServer提供的自动保持数据库完整性的一种机制,它定义了可输入表或表的单个列中的数据的限制条件。使用约束优先于使用触发器、规则和默认值。约束独立于表结构,可以在不改变表结构的基础上,添加或删除约束。当表被删除时,表所带的所有约束定义也随之被删除。12.1约束(1)主键约束(PrimaryKey,PK)表的一列或几列的组合的值在表中唯一地指定一行记录,这样的一列或多列称为表的主键,通过它可强制表的实体完整性。主键不能为空,且不同两行的键值不能相同。表本身并不要求一定要有主键,但最好给表定义主键。在规范化的表中,每行中的所有数据值都完全依赖于主键。

例如:学生表中的学号。12.1约束创建主键约束的方法在企业管理器中,打开表设计器。选择创建主键的列。单击工具栏设置主键按钮。12.1约束(2)外键约束(ForeignKey,FK)外键约束定义了表与表之间的关系。通过将一个表中一列或多列添加到另一个表中,创建两个表之间的连接,这个列就成为第二个表的外键,即外键是用于建立和加强两个表数据之间的连接的一列或多列,通过它可以强制参照完整性。外键约束的主要目的是控制存储在外键表中的数据。12.1约束创建外键约束的方法打开企业管理器,展开数据库,右键单击关系图,选择【新建数据库关系图】菜单项。根据向导提示,选择欲创建外键约束的表。出现如下界面,拖动关联列。12.1约束级联操作根据主键表中数据的修改而对外键表中数据相应地做相同的修改。SQLServer提供了两种级联操作:级联删除和级联修改级联删除:当主键表中某行被删除时,外键表中所有相关行将被删除。

例如:课程表中的c01课程被删除,选课表选了c01课程的记录都被删除。级联修改:当主键表中某行的键值被修改时,外键表中所有相关行的该外键值也将被自动修改为新值。

例如:将课程表中c02改为c30,选课表中c02的值也被自动更改为c30。12.1约束(3)唯一性约束(Unique)唯一性约束指定一个或多个列的组合的值具有唯一性,以防止在列中输入重复的值,为表中的一列或者多列提供实体完整性。

例如:身份证号码通常被设定唯一性约束。唯一性约束指定的列可以有NULL属性。主键也强制执行唯一性,但主键不允许空值,故主键约束强度大于唯一约束。因此主键列不能再设定唯一性约束。一个表可以定义多个唯一性约束。12.1约束创建唯一性约束在企业管理器中,打开表设计器。单击工具栏管理索引/键按钮。12.1约束(4)检查约束(Check)检查约束对输入列或整个表中的值设置检查条件,以限制输入值,保证数据库的数据完整性。当对具有检查约束列进行插入或修改时,SQLServer将用该检查约束的逻辑表达式对新值进行检查,只有满足条件(逻辑表达式返回TRUE)的值才能填入该列,否则报错。可以为每列指定多个CHECK约束。

例如:为学生表的性别列定义检查约束:

性别in('男','女')

或者

性别='男'or性别='女'12.1约束创建检查约束在企业管理器中,打开表设计器。单击工具栏管理索引/键按钮,选择【CHECK约束】。输入约束表达式12.2默认值默认值(Default)通过定义列的默认值或使用数据库的默认值对象绑定表的列,以确保在没有为某列指定数据时,来指定列的值。默认值可以是常量,也可以是表达式,还可以为NULL值。

例如:将学生表的性别列设置默认值'女'

。12.2默认值创建默认约束在企业管理器中,打开表设计器。选择设定默认值的列,输入默认值。12.2默认值使用默认对象默认对象是单独存储的,可以绑定到某列。删除表时,默认值会自动删除,但默认对象不会被删除。默认对象的操作(1)创建默认对象注意定界符12.2默认值(2)绑定默认对象将左侧列添加至右侧,即绑定将右侧绑定列删除至左侧,解除绑定修改默认对象12.2默认值(3)重命名默认对象(4)删除默认对象12.3规则规则是数据库中对存储在表的列或用户定义数据类型中的值的规定和限制。规则是单独存储的独立的数据库对象。规则与其作用的表或用户定义数据类型是相互独立的。规则和约束可以同时使用,表的列可以有一个规则及多个约束。规则与检查约束在功能上相似,但在使用上有所区别。规则的操作包括创建、查看、绑定、松绑和删除等。12.3规则创建规则在企业管理器中选择数据库对象“规则”,单击右键从快捷菜单中选择“新建规则”选项,即会弹出如图所示的“规则属性”对话框。输入规则名称和表达式之后,单击“确定”按钮,即完成规则的创建。12.3规则查看规则在企业管理器的数据库对象中选择“规则”对象,即可从右边的任务板中看到规则的大部分信息,包括规则的名称、所有者、创建时间等。规则列表12.3规则修改规则在企业管理器中,选中欲修改的规则,右键单击,选择【属性】菜单项。打开【规则属性】对话框。12.3规则规则的绑定与松绑绑定:指定规则作用于哪个表的那一列或哪个用户定义数据类型。表的一列或一个用户定义数据类型只能与一个规则绑定,而一个规则可以绑定多个对象。松绑:解除规则与对象的绑定。规则绑定到列规则绑定到用户定义数据类型将左侧列添加至右侧,即绑定将右侧绑定列删除至左侧,即松绑12.3规则删除规则在查看数据库规则窗口,右键单击欲删除的规则,选择【删除】菜单项。12.4事务处理事务(Transaction)是SQLServer中的一个逻辑工作单元,该单元将被作为一个整体进行处理。要么全部执行,要么都不执行。一个事务中的所有操作全部成功,事务才算完成,否则,操作全部撤销。事务的作用解决数据库中的数据不一致的问题。12.4事务处理张伟同学退学,需删除其学生表及选课表中的记录:deletefrom学生表where学号='s2008005'deletefrom选课表where学号='s2008005'学生表选课表学生表的数据删除后,掉电,引起数据不一致问题。12.4事务处理事务的属性(ACID)原子性(atomicity):事务必须是工作的最小单元,即原子单元,对于其数据的修改,要么全部执行,要么全都不执行。一致性(consistency):事务在完成后,必须使所有的数据都保持一致性状态。隔离性(isolation):一个事务所作的修改必须与任何其他并发事务所作的修改隔离。持久性(durability):事务完成后,它对于系统的影响是永久性的。12.4事务处理3种事务模式自动提交事务:每条单独的语句都是一个事务,为系统默认的事务管理模式。显式事务:用户定义事务的启动和结束。BEGINTRANSACTION:事务开始。COMMIT:事务完成。ROLLBACK:事务回滚。隐性事务:在当前事务完成提交或回滚后,新事务自动启动。即用户不需要指定事务的开始,但需要指定事务的提交和回滚。12.4事务处理事务的启动、提交和回滚在应用程序中,通常用BEGINTANSACTION语句来标识一个事务的开始,用COMMIT语句标识事务结束,用ROLLBACK语句标识事务回滚。12.4事务处理举例:分析以下T-SQL语句的执行结果。begintransaction

insertinto课程表(课程号,课程名,学时)values('c06','管理学',60)rollback

select*from课程表begintransaction

insertinto课程表(课程号,课程名,学时)values('c06','管理学',60)commit

select*from课程表12.5数据的锁定并发问题多个用户同时访问一个数据库,则当他们的事务同时使用相同的数据时可能会发生数据不一致的问题。并发问题包括:丢失或覆盖更新(LostUpdate)未确认的相关性(脏读,DirtyRead)不一致的分析(非重复读,Non-RepeatableRead)幻想读12.5数据的锁定SQLServer的锁模式锁(lock):是一种安全机制,用于控制多个用户的并发操作,以防止用户读取正在由其他用户更改的数据或者多个用户同时修改同一数据。锁模式:确定并发事务访问资源的方式。共享锁(sharelock):锁定的资源可以被其他用户读取,但其他用户不能修改它(只读操作)。排他锁(exclusivelock):锁定的资源只允许进行锁定操作的程序使用,其他任何对它的操作均不会被接受。更新锁(updatelock):用于可更新的资源中,是为了防止死锁而设立的。12.5数据的锁定通过企业管理器查看和终止锁在企业管理器中选择目录树窗口中“管理”文件夹下“当前活动”项中的“锁/进程ID”选项,可以查看当前锁定的进程。选择同级的“锁/对象”选项下的相应选项,则可以查看当前锁定的对象。12.5数据的锁定右键单击任务板窗口中的对象,从快捷菜单中选择【属性】项,则会出现如下图所示的锁的进程细节对话框。在此,可以刷新或终止锁的进程。12.5数据的锁定死锁及其防止死锁(deadlocking)是在多用户或多进程状况下,为使用同一资源而产生的无法解决的争用状态。死锁会造成资源的大量浪费,甚至会使系统崩溃。在SQLServer2000中,通常由锁监视器线程自动定期对死锁进行检测。当识别死锁后,SQLServer自动设置一个事务结束死锁进程。12.5数

温馨提示

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

评论

0/150

提交评论