数据库第12章 数据库完整性控制
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
12.5 数据的锁定
通过企业管理器 查看和终止锁
在企业管理器中 选择目录树窗口 中“管理”文件 夹下“当前活动” 项中的“锁/进程 ID”选项,可以查 看当前锁定的进 程。选择同级的 “锁/对象”选项 下的相应选项, 则可以查看当前 锁定的对象。
12.5 数据的锁定
右键单击任务板窗口中的对象,从快捷菜单中选择 【属性】项,则会出现如下图所示的锁的进程细节 对话框。在此,可以刷新或终止锁的进程。
12.5 数据的锁定
防止死锁应遵循以下原则:
(1) 尽量避免并发地执行涉及到修改数据的语句。 (2) 要求每个事务一次就将所有要使用的数据全部加 锁,否则就不予执行。 (3) 预先规定一个封锁顺序,所有的事务都必须按这 个顺序对数据执行封锁。例如,不同的过程在事 务内部对对象的更新执行顺序应尽量保持一致。 (4) 每个事务的执行时间不可太长,对程序段长的事 务可考虑将其分割为几个事务。
第12章 数据库完整性控制
计算中心
本章内容
12.1 12.2 12.3 12.4 12.5 约束 默认值 规则 事务处理 数据的锁定
数据完整性
数据完整性问题的提出
数据库中的数据是从外界输入的,由于种种原因, 会发生输入数据无效或错误。为了保证输入的 数据正确、符合规定,提出数据完整性问题。
数据完整性问题的解决
12.1 约束
创建唯一性约束
在企业管理器中,打开表设计器。 单击工具栏管理索引/键按钮 。
12.1 约束
(4) 检查约束(Check)
检查约束对输入列或整个表中的值设置检查条件, 以限制输入值,保证数据库的数据完整性。 当对具有检查约束列进行插入或修改时,SQL Server将用该检查约束的逻辑表达式对新值进行检 查,只有满足条件(逻辑表达式返回TRUE)的值才 能填入该列,否则报错。 可以为每列指定多个CHECK约束。 例如:为学生表的性别列定义检查约束:
12.4 事务处理
3种事务模式
自动提交事务:每条单独的语句都是一个事务, 为系统默认的事务管理模式。 显式事务:用户定义事务的启动和结束。
BEGIN TRANSACTION:事务开始。 COMMIT:事务完成。 ROLLBACK:事务回滚。
隐性事务:在当前事务完成提交或回滚后,新 事务自动启动。即用户不需要指定事务的开始, 但需要指定事务的提交和回滚。
级联删除:当主键表中某行被删除时,外键表中所有相关 行将被删除。 例如:课程表中的c01课程被删除,选课表选了c01课程 的记录都被删除。 级联修改:当主键表中某行的键值被修改时,外键表中所 有相关行的该外键值也将被自动修改为新值。 例如:将课程表中c02改为c30,选课表中c02的值也被自 动更改为c30。
12.4 事务处理
事务的属性(ACID)
原子性(atomicity):事务必须是工作的最小 单元,即原子单元,对于其数据的修改,要么 全部执行,要么全都不执行。 一致性(consistency):事务在完成后,必 须使所有的数据都保持一致性状态。 隔离性(isolation):一个事务所作的修改必 须与任何其他并发事务所作的修改隔离。 持久性(durability):事务完成后,它对于 系统的影响是永久性的。
12.3 规则
创建规则
在企业管理器中选择 数据库对象“规则”, 单击右键从快捷菜单 中选择“新建规则” 选项,即会弹出如图 所示的“规则属性” 对话框。 输入规则名称和表达 式之后,单击“确定” 按钮,即完成规则的 创建。
12.3 规则
查看规则
在企业管理器的数据库对象中选择“规则”对象, 即可从右边的任务板中看到规则的大部分信息, 包括规则的名称、所有者、创建时间等。
12.5 数据的锁定
SQL Server的锁模式
锁(lock):是一种安全机制,用于控制多个用 户的并发操作,以防止用户读取正在由其他用户 更改的数据或者多个用户同时修改同一数据。 锁模式:确定并发事务访问资源的方式。
共享锁(share lock):锁定的资源可以被其他用 户读取,但其他用户不能修改它(只读操作)。 排他锁(exclusive lock):锁定的资源只允许进 行锁定操作的程序使用,其他任何对它的操作均不 会被接受。 更新锁(update lock):用于可更新的资源中, 是为了防止死锁而设立的。
性别 in('男' , '女') 或者 性别= '男' or 性别 = '女'
12.1 约束
创建检查约束
在企业管理器中,打开表设计器。 单击工具栏管理索引/键按钮 ,选择【CHECK约束】。
输入约束 表达式
12.2 默认值
默认值(Default)
通过定义列的默认值或使用数据库的默认值对 象绑定表的列,以确保在没有为某列指定数据 时,来指定列的值。 默认值可以是常量,也可以是表达式,还可以 为NULL值。 例如:将学生表的性别列设置默认值'女' 。
12.1 约束
创建主键约束的方法
在企业管理器中,打开表设计器。 选择创建主键的列。 单击工具栏设置主键按钮 。
12.1 约束
(2) 外键约束(Foreign Key,FK) 外键约束定义了表与表之间的关系。 通过将一个表中一列或多列添加到另一个表中, 创建两个表之间的连接,这个列就成为第二个 表的外键,即外键是用于建立和加强两个表数 据之间的连接的一列或多列,通过它可以强制 参照完整性。 外键约束的主要目的是控制存储在外键表中的 数据。
12.4 事务处理
事务的启动、提交和回滚
在应用程序中,通常用BEGIN TANSACTION语句来标识一个事务的开 始,用COMMIT语句标识事务结束,用 ROLLBACK语句标识事务回滚。
12.4 事务处理
举例:分析以下T-SQL语句的执行结果。
begin transaction insert into 课程表(课程 号,课程名,学时) values('c06', '管理学',60) rollback select * from 课程表 begin transaction insert into 课程表(课程 号,课程名,学时) values('c06', '管理学',60) commit select * from 课程表
规则列 表
12.3 规则
修改规则
在企业管理器中,选中欲修改的规则,右键单击,选择 【属性】菜单项。 打开【规则属性】对话框。
12.3 规则
规则的绑定与松绑
绑定:指定规则作用于哪个表的那一列或哪个用户定义 数据类型。表的一列或一个用户定义数据类型只能与一 个规则绑定,而一个规则可以绑定多个对象。 松绑:解除规则与对象的绑定。
小结与提问
数据库完整性约束
数据完整性问题 如何保证数据的完整性
约束 默认值 规则 事务处理 数据的锁定
12.5 数据的锁定
死锁及其防止
死锁(deadlocking)是在多用户或多进程状 况下,为使用同一资源而产生的无法解决的争 用状态。 死锁会造成资源的大量浪费,甚至会使系统崩 溃。在SQL Server2000中,通常由锁监视器 线程自动定期对死锁进行检测。当识别死锁后, SQL Server自动设置一个事务结束死锁进程。
SQL Server2000中可以通过各种约束、默认值、 规则等数据库对象来保证数据的完整性。
数据完整性包括实体完整性、域完整性、 参照完整性和用户自定义完整性。
12.1 约束
约束(Constraint)是SQL Server提供的自动 保持数据库完整性的一种机制,它定义了 可输入表或表的单个列中的数据的限制条 件。使用约束优先于使用触发器、规则和 默认值。
12.2 默认值
创建默认约束
在企业管理器中,打开表设计器。 选择设定默认值的列,输入默认值。
12.2 默认值
使用默认对象
默认对象是单独存储的,可以绑定到某列。删 除表时,默认值会自动删除,但默认对象不会 被删除。 默认对象的操作
(1) 创建默认对象
注意定 界符
12.2 默认值
(2) 绑定默认对象
12.5 数据的锁定
并发问题
多个用户同时访问一个数据库,则当他们的事 务同时使用相同的数据时可能会发生数据不一 致的问题。 并发问题包括:
丢失或覆盖更新(Lost Update) 未确认的相关性(脏读,Dirty Read) 不一致的分析(非重复读,Non-Repeatable Read) 幻想读
12.1 约束
(3) 唯一性约束(Unique)
唯一性约束指定一个或多个列的组合的值具有 唯一性,以防止在列中输入重复的值,为表中 的一列或者多列提供实体完整性。
例如:身份证号码通常被设定唯一性约束。
唯一性约束指定的列可以有NULL属性。主键 也强制执行唯一性,但主键不允许空值,故主 键约束强度大于唯一约束。因此主键列不能再 设定唯一性约束。 一个表可以定义多个唯一性约束。
将左侧列 添加至右 侧,即绑 定 将右侧绑定列 删除至左侧, 即松绑
规则绑定 到用户定 义数据类 型
规则绑 定到列
12.3 规则
删除规则
在查看数据库规则窗口,右键单击欲删除的规则, 选择【删除】菜单项。
12.4 事务处理
事务(Transaction)
是SQL Server中的一个逻辑工作单元,该单 元将被作为一个整体进行处理。 要么全部执行,要么都不执行。一个事务中的 所有操作全部成功,事务才算完成,否则,操 作全部撤销。
事务的作用
解决数据库中的数据不一致的问题。
12.4 事务处理
学生表 选课表
张伟同学退学,需删除其学生表及选课表中的记录: 学生表的数据删 delete from 学生表 where 学号='s2008005' delete from 选课表 where 学号='s2008005'
除后,掉电,引 起数据不一致问 题。
12.1 约束
创建外键约束的方法
打开企业管理器,展开数据库,右键单击关系图,选 择【新建数据库关系图】菜单项。 根据向导提示,选择欲创建外键约束的表。 出现如下界面,拖动关联列。
12.1 约束
级联操作
根据主键表中数据的修改而对外键表中数据相应地做相 同的修改。 SQL Server提供了两种级联操作:级联删除和级联修改
修改默 认对象
将左侧列 添加至右 侧,即绑 定
将右侧绑定列 删除至左侧, 解除绑定
12.2 默认值
(3) 重命名默认对象
(4) 删除默认对象
Leabharlann Baidu
12.3 规则
规则是数据库中对存储在表的列或用户定义数据类 型中的值的规定和限制。 规则是单独存储的独立的数据库对象。 规则与其作用的表或用户定义数据类型是相互独立 的。 规则和约束可以同时使用,表的列可以有一个规则 及多个约束。 规则与检查约束在功能上相似,但在使用上有所区 别。 规则的操作包括创建、查看、绑定、松绑和删除等。
约束独立于表结构,可以在不改变表结构 的基础上,添加或删除约束。当表被删除 时,表所带的所有约束定义也随之被删除。
12.1 约束
(1) 主键约束(Primary Key,PK)
表的一列或几列的组合的值在表中唯一地指定一行记录, 这样的一列或多列称为表的主键,通过它可强制表的实 体完整性。 主键不能为空,且不同两行的键值不能相同。 表本身并不要求一定要有主键,但最好给表定义主键。 在规范化的表中,每行中的所有数据值都完全依赖于主 键。 例如:学生表中的学号。