数据隔离级别.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据隔离级别

数据隔离级别 隔离级别定义了事务与事务之间的隔离程度。 隔离级别与并发性是互为矛盾的:隔离程度越高,数据库的并发性越差;隔离程度越低,数据库的并发性越好。 ANSI/ISO SQL92标准定义了一些数据库操作的隔离级别: 未提交读(read uncommitted) 提交读(read committed) 重复读(repeatable read) 序列化(serializable) 通过一些现象,可以反映出隔离级别的效果。这些现象有: 更新丢失(lost update):当系统允许两个事务同时更新同一数据是,发生更新丢失。 脏读(dirty read):当一个事务读取另一个事务尚未提交的修改时,产生脏读。 非重复读(nonrepeatable read):同一查询在同一事务中多次进行,由于其他提交事务所做的修改,每次返回不同的结果集,此时发生非重复读。 幻像(phantom read):同一查询在同一事务中多次进行,由于其他提交事务所做的插入或删除操作,每次返回不同的结果集,此时发生幻像读。 下面是隔离级别及其对应的可能出现或不可能出现的现象 脏读: Mary的原工资为1000,财务人员将Mary的工资改为了8000,但未提交事务 Connection con1 = getConnection(); con.setAutoCommit(false); update employee set salary = 8000 where empId =Mary; 与此同时,Mary正在读取自己的工资 Connection con2 = getConnection(); select salary fromemployee where empId =Mary; mit(); Mary发现自己的工资变为了8000,欢天喜地! 而财务发现操作有误,而回滚了事务,Mary的工资又变为了1000 //con1 con1.rollback(); ? 像这样,Mary记取的工资数8000是一个脏数据。 READ_COMMITTED 保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据。这种事务隔离级别可以避免脏读出现,但是可能会出现不可重复读和幻像读。 不可重复读: 在事务1中,Mary 读取了自己的工资为1000,操作并没有完成 con1 = getConnection(); select salary from employee empId =Mary; ? 在事务2中,这时财务人员修改了Mary的工资为2000,并提交了事务. con2 = getConnection(); update employee set salary = 2000; ? 在事务1中,Mary 再次读取自己的工资时,工资变为了2000 //con1 select salary from employee empId =Mary; ? 在一个事务中前后两次读取的结果并不致,导致了不可重复读。 使用REPEATABLE_READ可以避免这种情况发生。 幻像读: 目前工资为1000的员工有10人。 事务1,读取所有工资为1000的员工。 con1 = getConnection(); Select * from employee where salary =1000;共读取10条记录 这时另一个事务向employee表插入了一条员工记录,工资也为1000 con2 = getConnection(); Insert into employee(empId,salary) values(Lili,1000); mit(); 事务1再次读取所有工资为1000的员工 //con1 select * from employee where salary =1000; ? 共读取到了11条记录,这就产生了幻像读。 ISOLATION_SERIALIZABLE能避免这样的情况发生。但是这样也耗费了最大的资源。 大多数数据库的默认隔离级别为:?Read?Commited,如Sql?Server?,?Oracle. ? 少数数据库默认的隔离级别为Repeatable?Read,?如MySQL?InnoDB存储引擎 锁的概念 2-1 锁是数据库用来控制共享资源并发访问的机制。 锁用于保护正在被修改的数据 直到提交或回滚了事务之后,其他用户才可以更新数据 锁的概念 2-2 锁定的优点 一致性 - 一次只允许一个用户修改数据 完整性 - 为所有用户提供正确的数据。如果一个用户进行了修改并保存,

文档评论(0)

hf916589 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档