数据库事务隔离级别与锁_第1页
数据库事务隔离级别与锁_第2页
数据库事务隔离级别与锁_第3页
数据库事务隔离级别与锁_第4页
全文预览已结束

下载本文档

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

文档简介

1、数据库事务隔离级别与锁一,事务的 4 个基本特征Atomic (原子性):事务中包含的操作被看做一个逻辑单元,这个逻辑单元中的操作要 么全部成功,要么全部失败。Consistency(一致性):只有合法的数据可以被写入数据库,否则事务应该将其回滚到最初状态。Isolation(隔离性):事务允许多个用户对同一个数据进行并发访问,而不破坏数据的正确性和完整性。同时,并行事务的修改必须与其他并行事务的修改相互独立。Durability (持久性):事务结束后,事务处理的结果必须能够得到固化。以上属于废话二 ,为什么需要对事务并发控制如果不对事务进行并发控制,我们看看数据库并发操作是会有那些异常情形

2、Lost update:两个事务都同时更新一行数据,但是第二个事务却中途失败退出, 导致对数据的两个修改都失效了。Dirty Reads:一个事务开始读取了某行数据,但是另外一个事务已经更新了此数 据但没有能够及时提交。这是相当危险的,因为很可能所有的操作 都被回滚。Non-repeatable Reads:一个事务对同一行数据重复读取两次,但是却得到了不同的结果。Second lost updates problem:无法重复读取的特例。有两个并发事务同时读取同一行数据,然后其中一个对它进行修改提交,而另一个也进行了修改提交。这就会造成第一次写操作失效。Phantom Reads:事务在操作

3、过程中进行两次查询,第二次查询的结果包含了第一次查 询中未出现的数据(这里并不要求两次查询的 SQL 语句相同)。这是 因为在两次查询过程中有另外一个事务插入数据造成的。三, 数据库的隔离级别为了兼顾并发效率和异常控制,在标准SQL 规范中,定义了别,( ORACLE 和 SQLSERER 对标准隔离级别有不同的实现Read Uncommitted:4 个事务隔 离级)直译就是 "读未提交 ",意思就是即使一个更新语句没有提交 ,但是别 的事务可以读到这个改变 .这是很不安全的 .Read Committed:直译就是 "读提交 ",意思就是语句提交以后

4、即执行了 COMMIT 以后 别的事务就能读到这个改变 .Repeatable Read:直译就是 "可以重复读得到的结果是一样的 .",这是说在同一个事务里面先后执行同一个查询语句的时候,Serializable:直译就是 "序列化 ",意思是说这个事务执行的时候不允许别的事务四,隔离级别对并发的控制下表是各隔离级别对各种异常的控制能力。RURCRRS并发执行 .LUYNNNDRYNNNNRRYYNNSLUYYNNPRYYYN(注: LU :丢失更新; DR:脏读; NRR:非重复读; SLU:二类丢失更新; PR:幻像读 )顺便举一小例。MS_SQL

5、: -事务一set transaction isolation level serializable begin traninsert into test values('xxx')-事务二set transaction isolation level read committedbegin transelect * from test-事务三set transaction isolation level read uncommittedbegin transelect * from test在查询分析器中执行事务一后,分别执行事务二,和三。结果是事务二会等待,而事务三则会执行

6、。ORACLE :-事务一set transaction isolation level serializable;insert into test values('xxx');select * from test;-事务二set transaction isolation level read committed-ORACLE默认级别 select * from test执行事务一后,执行事务二。结果是事务二只读出原有的数据,无视事务一的插入操作。读者是否发现 MS_SQL 和 ORACLE 对并发控制的处理有所不同呢?五 ,锁下表是锁的兼容或冲突情形。现有SUX请求SYYN

7、UYNNXNNN申请SUX 现有S Y Y N U Y N N X N N N oracle:六,隔离级别与锁七,注意点一般处理并发问题时的步骤:1、开启事务。2、申请写权限,也就是给对象(表或记录 )加锁。3、假如失败,则结束事务,过一会重试。4、假如成功,也就是给对象加锁成功,防止其他用户再用同样的方式打开。5、进行编辑操作。6、写入所进行的编辑结果。7、假如写入成功,则提交事务,完成操作。8、假如写入失败,则回滚事务,取消提交。9、 (7.8)两步操作已释放了锁定的对象,恢复到操作前的状态。对多表的操作最好一起取得锁,或则保证处理顺序 ;个人感觉还是前者好 ,虽然效率低一些八,附查看锁ORACLE :selectobject_name,session_id,os_user_name,oracle_username

温馨提示

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

评论

0/150

提交评论