oracle数据库锁的级别,MSSQL与Oracle数据库事务隔离级别与锁机制对比

一,事务的4个基本特征

Atomic(原子性):

事务中包含的操作被看做一个逻辑单元,这个逻辑单元中的操作要

么全部成功,要么全部失败。

Consistency(一致性):

只有合法的数据可以被写入数据库,否则事务应该将其回滚到最初

状态。

Isolation(隔离性):

事务允许多个用户对同一个数据进行并发访问,而不破坏数据的正

确性和完整性。同时,并行事务的修改必须与其他并行事务的修改

相互独立。

Durability(持久性):

事务结束后,事务处理的结果必须能够得到固化。

以上属于废话

二,为什么需要对事务并发控制

如果不对事务进行并发控制,我们看看数据库并发操作是会有那些异常情形

Lost update:

两个事务都同时更新一行数据,但是第二个事务却中途失败退出,

导致对数据的两个修改都失效了。

Dirty Reads:

一个事务开始读取了某行数据,但是另外一个事务已经更新了此数

据但没有能够及时提交。这是相当危险的,因为很可能所有的操作

都被回滚。

Non-repeatable Reads:

一个事务对同一行数据重复读取两次,但是却得到了不同的结果。

Second lost updates problem:

无法重复读取的特例。有两个并发事务同时读取同一行数据,然后其

中一个对它进行修改提交,而另一个也进行了修改提交。这就会造成

第一次写操作失效。

Phantom Reads:

事务在操作过程中进行两次查询,第二次查询的结果包含了第一次查

询中未出现的数据(这里并不要求两次查询的SQL语句相同)。这是

因为在两次查询过程中有另外一个事务插入数据造成的。

三, 数据库的隔离级别

为了兼顾并发效率和异常控制,在标准SQL规范中,定义了4个事务隔

离级别,(ORACLE和SQLSERER对标准隔离级别有不同的实现 )

Read Uncommitted:

直译就是"读未提交",意思就是即使一个更新语句没有提交,但是别

的事务可以读到这个改变.这是很不安全的.

Read Committed:

直译就是"读提交",意思就是语句提交以后即执行了COMMIT以后

别的事务就能读到这个改变.

Repeatable Read:

直译就是"可以重复读",这是说在同一个事务里面先后执行同一个

查询语句的时候,得到的结果是一样的.

Serializable:

直译就是"序列化",意思是说这个事务执行的时候不允许别的事务

并发执行.

四,隔离级别对并发的控制

下表是各隔离级别对各种异常的控制能力。

LU DR NRR SLU PR

RU Y Y Y Y Y

RC N N Y Y Y

RR N N N N Y

S N N N N N

(注:LU:丢失更新;DR:脏读;NRR:非重复读;SLU:二类丢失更新;PR:幻像读)

顺便举一小例。

MS_SQL:

--事务一

set transaction isolation level serializable

begin tran

insert into test values('xxx')

--事务二

set transaction isolation level read committed

begin tran

select * from test

--事务三

set transaction isolation level read uncommitted

begin tran

select * from test

这就是微学网-程序员之家为你提供的"MSSQL与Oracle数据库事务隔离级别与锁机制对比"希望对你有所帮助.本文来自网络,转载请注明出处:http://www.weixuecn.cn/article/6550.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值