数据库事务隔离级别与锁

数据库事务隔离级别与锁

ID:36503677

大小:45.00 KB

页数:5页

时间:2019-05-11

数据库事务隔离级别与锁_第1页
数据库事务隔离级别与锁_第2页
数据库事务隔离级别与锁_第3页
数据库事务隔离级别与锁_第4页
数据库事务隔离级别与锁_第5页
资源描述:

《数据库事务隔离级别与锁》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

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

2、行并发控制,我们看看数据库并发操作是会有那些异常情形Lostupdate:两个事务都同时更新一行数据,但是第二个事务却中途失败退出,导致对数据的两个修改都失效了。DirtyReads:一个事务开始读取了某行数据,但是另外一个事务已经更新了此数据但没有能够及时提交。这是相当危险的,因为很可能所有的操作都被回滚。Non-repeatableReads:一个事务对同一行数据重复读取两次,但是却得到了不同的结果。Secondlostupdatesproblem:无法重复读取的特例。有两个并发事务同时读取同一行数据,然后其中一个对它进行修改

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

4、安全的.ReadCommitted:直译就是"读提交",意思就是语句提交以后即执行了COMMIT以后别的事务就能读到这个改变.RepeatableRead:直译就是"可以重复读",这是说在同一个事务里面先后执行同一个查询语句的时候,得到的结果是一样的.Serializable:直译就是"序列化",意思是说这个事务执行的时候不允许别的事务并发执行.四,隔离级别对并发的控制下表是各隔离级别对各种异常的控制能力。LUDRNRRSLUPRRUYYYYYRCNNYYYRRNNNNYSNNNNN(注:LU:丢失更新;DR:脏读;NRR:非重复

5、读;SLU:二类丢失更新;PR:幻像读)顺便举一小例。MS_SQL:--事务一settransactionisolationlevelserializablebegintraninsertintotestvalues('xxx')--事务二settransactionisolationlevelreadcommittedbegintranselect*fromtest--事务三settransactionisolationlevelreaduncommittedbegintranselect*fromtest在查询分析器中执行事务

6、一后,分别执行事务二,和三。结果是事务二会等待,而事务三则会执行。ORACLE:--事务一settransactionisolationlevelserializable;insertintotestvalues('xxx');select*fromtest;--事务二settransactionisolationlevelreadcommitted--ORACLE默认级别select*fromtest执行事务一后,执行事务二。结果是事务二只读出原有的数据,无视事务一的插入操作。读者是否发现MS_SQL和ORACLE对并发控制的处

7、理有所不同呢?五,锁下表是锁的兼容或冲突情形。现有SUX请求SYYNUYNNXNNN现有SUX申请SYYNUYNNXNNNoracle:  六,隔离级别与锁七,注意点一般处理并发问题时的步骤:1、开启事务。2、申请写权限,也就是给对象(表或记录)加锁。3、假如失败,则结束事务,过一会重试。4、假如成功,也就是给对象加锁成功,防止其他用户再用同样的方式打开。5、进行编辑操作。6、写入所进行的编辑结果。7、假如写入成功,则提交事务,完成操作。8、假如写入失败,则回滚事务,取消提交。9、(7.8)两步操作已释放了锁定的对象,恢复到操作前

8、的状态。对多表的操作最好一起取得锁,或则保证处理顺序;个人感觉还是前者好,虽然效率低一些八,附查看锁ORACLE:selectobject_name,session_id,os_user_name,oracle_username,process,l

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。