您好、欢迎来到现金彩票网!
当前位置:彩66彩票app下载 > 隔离级 >

在标准sql中事务的隔离级别包含哪些

发布时间:2019-07-22 17:56 来源:未知 编辑:admin

  spring的事务处理主要是依靠AOP实现的,这个没什么好说的随便搜索一下,网上很多示例。隔离级别是针对并发事务而言的,单个事务的处理很简单不多说。并发事务的处理则比较复杂,因为往往一条数据是跨事务的,这会造成许多不可预知的后果。一般来说,系统执行并发事务时,会把当前在执行的事务独立起来,也就是和其他事务进行隔离。好像系统中只有这一个事务,其他事务不存在一样。这也就是完全隔离,即系统中只运行单位时间内,最多只有一个事务在执行,其他事务要等到该事务执行完毕之后才能执行,这在现实中基本是不可行的,比如,你要更新你的QQ用户信息,那么就是说,在你更新的这段时间内,其他的用户是无法更新他的用户信息的。举个深动的例子,把事务比作一条在公路上奔跑的汽车,完全隔离,就像是,在汽车从公路一头到另一头这段时间内,公路上不允许有其他的汽车,这样做当然可以完全避免车祸,也就是数据跨事务带来的隐患风险,但是带来了巨大的效率问题,那么如果同时在公路上让多辆汽车行驶会造成什么情况呢。具体来说有一下几种:更新丢失(LostUpdate):两个事务都企图去更新一行数据,导致事务抛出异常退出,两个事务的更新都白费了。脏数据(DirtyRead):如果第二个应用程序使用了第一个应用程序修改过的数据,而这个数据处于未提交状态,这时就会发生脏读。第一个应用程序随后可能会请求回滚被修改的数据,从而导致第二个事务使用的数据被损坏,即所谓的“变脏”。不可重读(UnrepeatableRead):一个事务两次读同一行数据,可是这两次读到的数据不一样,就叫不可重读。如果一个事务在提交数据之前,另一个事务可以修改和删除这些数据,就会发生不可重读。幻读(PhantomRead):一个事务执行了两次查询,发现第二次查询结果比第一次查询多出了一行,这可能是因为另一个事务在这两次查询之间插入了新行。以上就是并行事务处理时常遇到的大致问题。针对这些问题,提出了几个不同的事务隔离级别,适应特定的环境需要。具体是:读操作未提交(ReadUncommitted):说明一个事务在提交前,其变化对于其他事务来说是可见的。这样脏读、不可重读和幻读都是允许的。当一个事务已经写入一行数据但未提交,其他事务都不能再写入此行数据;但是,任何事务都可以读任何数据。这个隔离级别使用排写锁实现。读操作已提交(ReadCommitted):读取未提交的数据是不允许的,它使用临时的共读锁和排写锁实现。这种隔离级别不允许脏读,但不可重读和幻读是允许的。可重读(RepeatableRead):说明事务保证能够再次读取相同的数据而不会失败。此隔离级别不允许脏读和不可重读,但幻读会出现。可串行化(Serializable):提供最严格的事务隔离。这个隔离级别不允许事务并行执行,只允许串行执行。这样,脏读、不可重读或幻读都可发生

http://article12.net/geliji/740.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有