数据库系统概论10_第1页
数据库系统概论10_第2页
数据库系统概论10_第3页
数据库系统概论10_第4页
数据库系统概论10_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

1、 数据库系统概论数据库系统概论视图、事务视图、事务主讲:刘志鹏主讲:刘志鹏2Hello View! select * from my_contacts natural join job_current; create view mc as (select * from my_contacts natural join job_current); select * from mc;3视图视图(View) 数据库中的视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且

2、在引用视图时动态生成。4 1.从用户角度来看,一个视图是从一个特定的角度来查看数据库中的数据。 2.从数据库系统内部来看,一个视图是由SELECT语句组成的查询定义的虚拟表,是由一张或多张表中的数据组成的。 3.从数据库系统外部来看,视图就如同一张表一样,对表能够进行的一般操作都可以应用于视图,例如查询,插入,修改,删除操作等。5视图的作用视图的作用 1.简单性简单性 看到的就是需要的。视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件。6 2.安全性安全性 通过视图用户只能查询和修改他们所能见到的数据。

3、数据库中的其它数据则既看不见也取不到。数据库授权命令可以使每个用户对数据库的检索限制到特定的数据库对象上,但不能授权到数据库特定行和特定的列上。通过视图,用户可以被限制在数据的不同子集上。 3.逻辑数据独立性逻辑数据独立性 视图可帮助用户屏蔽真实表结构变化带来的影响。7事务事务 数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作。 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。一个逻辑工作单元要成为事务,必须满

4、足所谓的ACID(原子性、一致性、隔离性和持久性)特性。8时间时间账户账户A账户账户B从账户从账户A转账转账100元到账户元到账户B11000查询账户查询账户A余额余额 1000元元Select sum from A2900从账户从账户A中减去中减去100元元Update A set sum=9003100查询账户查询账户B余额余额100元元Select sum from B4200汇入汇入B账户账户100元元Update B set sum=2005900200转账完成!转账完成!9时间时间账户账户A账户账户B从账户从账户A转账转账100元到账户元到账户B11000查询账户查询账户A余额余额

5、 1000元元Select sum from A2900从账户从账户A中减去中减去100元元Update A set sum=9003100查询账户查询账户B余额余额100元元Select sum from B4意外发生意外发生(如停电、网络中断等如停电、网络中断等),后面的更新账户,后面的更新账户B的的操作无法完成操作无法完成5系统恢复后系统恢复后6100查询账户查询账户B余额余额100元元Select sum from B7900查询账户查询账户A余额余额 900元元Select sum from A8账户账户A的的100元人间蒸发元人间蒸发10Hello Transaction! Set

6、 autocommit = 0; Start trasaction; Insert into . Insert into . Rollback;(Commit;)11原子性原子性 (Atomicity ) 原子性属性用于标识事务是否完全地完成,一个事务的任何更新要在系统上完全完成,如果由于某种原因出错,事务不能完成它的全部任务,系统将返回到事务开始前的状态。12一致性一致性( Consistency ) 事务在系统完整性中实施一致性,这通过保证系统的任何事务最后都处于有效状态来实现。如果事务成功地完成,那么系统中所有变化将正确地应用,系统处于有效状态。如果在事务中出现错误,那么系统中的所有变化

7、将自动地回滚,系统返回到原始状态。因为事务开 始时系统处于一致状态,所以现在系统仍然处于一致状态。13隔离性隔离性 ( Isolation) 在隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。如果有两个事务,运行在相同的时间内,执行相同的功能,事务的隔离性将确保每一事务在 系统中认为只有该事务在使用系统。 这种属性有时称为串行化,为了防止事务操作间的混淆,必须串行化或序列化请求,使得在同一时间仅有一个请求用于同一数据。14持久性持久性 (Durabilily) 持久性意味着一旦事务执行成功,在系统中产生的所有变化将是永久的。应该存在一些检查点防止在系统失败时丢失信息。甚至硬件本身

8、失败,系统的状态仍能通过在日志中记录事务完成的任务进行重建。持久性的概念允许开发者认为不管系统以后发生了什么变化,完 成的事务是系统永久的部分。 15事务在并发时都会遇到那些问题呢?事务在并发时都会遇到那些问题呢? 我们先来看看数据库并发操作时会有那些异常情形 161、第一类丢失更新(Lost update) 两个事务都同时更新一行数据,但是第二个事务却中途失败退出,导致对数据的两个修改都失效了。 17时间时间取款事务取款事务A存款事务存款事务B1开始事务开始事务2开始事务开始事务3查询账户余额为查询账户余额为1000元元4查询账户余额为查询账户余额为1000元元5汇入汇入100元把余额改为元

9、把余额改为1100元元6提交事务(提交事务(commit)7取出取出100把余额改为把余额改为900元元8撤销事务撤销事务(roll back)9余额恢复为余额恢复为1000元(元(丢失更新丢失更新)182、脏读(Dirty Read) 一个事务开始读取了某行数据,但是另外一个事务已经更新了此数据但没有能够及时提交。这是相当危险的,因为很可能所有的操作都被回滚。 19时间时间取款事务取款事务A存款事务存款事务B1开始事务开始事务2开始事务开始事务3查询账户余额为查询账户余额为1000元元4存入存入100元把余额改为元把余额改为1100元元5查询账户余额为查询账户余额为1100元元(读取脏数据读

10、取脏数据)6撤销事务撤销事务(roll back)7取出取出11008提交事务失败提交事务失败203、不可重复读(Non-repeatable Read) 一个事务对同一行数据重复读取两次,但是却得到了不同的结果。同一查询在同一事务中多次进行,由于其他提交事务所做的修改或删除,每次返回不同的结果集,此时发生非重复读。21时间时间取款事务取款事务A存款事务存款事务B1开始事务开始事务2开始事务开始事务3查询账户余额为查询账户余额为1000元元4查询账户余额为查询账户余额为1000元元5存入存入100元把余额改为元把余额改为1100元元6提交事务提交事务8查询账户余额为查询账户余额为1100元元9

11、提交事务提交事务224、二类丢失更新(Second lost update) 无法重复读取的特例。有两个并发事务同时读取同一行数据,然后其中一个对它进行修改提交,而另一个也进行了修改提交。这就会造成第一次写操作失效。23时间时间取款事务取款事务A存款事务存款事务B1开始事务开始事务2开始事务开始事务3查询账户余额为查询账户余额为1000元元4查询账户余额为查询账户余额为1000元元5取出取出100元把余额改为元把余额改为900元元6提交事务提交事务8存入存入100元把余额改为元把余额改为1100元元(丢失更新)(丢失更新)9提交事务提交事务245、幻读(Phantom Read) 事务在操作过

12、程中进行两次查询,第二次查询的结果包含了第一次查 询中未出现的数据(这里并不要求两次查询的SQL语句相同)。这是因为在两次查询过程中有另外一个事务插入数据造成的。 和不可重复读的区别: 1.幻读考虑的是插入和删除的操作。 2.不可重复读考虑的是更新操作。25时间时间查询学生事务查询学生事务A插入学生事务插入学生事务B1开始事务开始事务2开始事务开始事务3查询学生人数查询学生人数10人人4插入一个新学生插入一个新学生5查询学生人数查询学生人数11人人6提交事务提交事务9提交事务提交事务26三、数据库管理系统(RDBMS)对事务并发时的隔离机制 为了兼顾并发效率和异常控制,在标准SQL规范中,定义

13、了4个事务隔离级别 1、未提交读(Read Uncommitted) 2、提交读(Read Committed) 3、可重复读(Repeatable Read) 4、串行读(Serializable) 27未提交读未提交读(Read Uncommitted) 直译就是读未提交,意思就是即使一个更新语句没有提交,但是别的事务可以读到这个改变.这是很不安全的。允许任务读取数据库中未提交的数据更改,也称为脏读。 28提交读(Read Committed) 直译就是读提交,可防止脏读,意思就是语句提交以后即执行了COMMIT以后 别的事务就能读到这个改变. 只能读取到已经提交的数据。Oracle等多数数据库默认都是该级别 29可重复读(Repeatable Read) 直译就是可以重复读,这是说在同一个事务里面先后执行同一个查询语句的时候,得到的结果是一样的.在同一个事务内的查询都是事务开始时刻一致的,InnoDB默认级别。在SQL标准中,该隔离级别消除了不可重复读,但是还存在幻象读 30串行读(Serializable) 直译就是序列化,意思是

温馨提示

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

评论

0/150

提交评论