事务之123

 

1:什么是事务:

事务是一系列操作的集合,这一系列操作可以看成一个工作单元;

也可以说是一个工作单元;

2:事务执行的结果:

要么commit;要么rollback

3:事务的4个小特性:(面试的时候一般都会问这个问题)

a)原子性:

事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。<o:p></o:p>

b )一致性(consistency):<o:p></o:p>

指的是事务执行前后的系统状态必须保持一致。比如说,某一事务中涉及到了户头之间的转账。那么,consistency 就是说,不管有多少户头参与了转账,也不管转了多少钱,最终总的钱数目必须与事务执行前的总数目一致。---- 当然,不考虑跨银行转账的问题。<o:p></o:p>

               C)隔离性:

              只有在事务的并发执行的时候才涉及到事物的隔离性;

              由并发事务所作的修改必须与任何其他并发事务所作的修改隔离。事务识别数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是第二个事务修改它之后的状态,事务不会识别中间状态的数据。这称为可串行性,因为它能够重新装载起始数据,并且重播一系列事务,以使数据结束时的状态与原始事务执行的状态相同。<o:p></o:p>

           d)持久性:<o:p></o:p>

        事务完成后,它对系统(可理解成为数据库)的影响是持久的;<o:p></o:p>

  4:事务并发执行引起的问题(注意事务A和事务B 的执行的先后顺序)<o:p></o:p>

(1)         lost update:

 AB事务并发执行,A事务执行update后,提交;B事务在A事务update后,B事务结束前也做了对同样数据的update操作,然后rollback,则两次提交操作都丢失了。
(2)    
dirty read:<o:p></o:p>

AB事务并发执行,B事务执行update后,A事务select B事务没有提交的数据,B事务roolback,则A事务得到的数据不是数据库中的真实数据。也就是dirty data(和数据库中不一致的数据)
(3
)   unrepeatable read:(不可重复的读)

unrepeatable-read简而言之是因为事务B对数据进行那update(更新操作),导致事务A前后2次对数据进行select(读操作)(一次是发生在事务B update数据之前,一次是update之后;)时,读取的数据不同;<o:p></o:p>

AB事务并发执行,A事务select数据,然后B事务update该数据,A再次select该数据时,发现该数据变化了。】

(4)   phantom read:(幻读)

AB事务并发执行,A事务select数据,B事务insert或者update数据,A事务再次select发现结果集中有以前没有的数据或者以前有的数据消失了。

注意:以上事务的并发所引起的问题,都是2个事务(或多个事务)并发对一组相同的数据进行操作所 引起的;

所谓的幻读,脏读,不可重复读。大家可以从名字上就知道个大概;幻读,脏读,不可重复读中间都有一个“读”

字,可见,当2个事务并发执行的时候,其中一个事务A肯定有读的操作。而另外一事务B只是更新了事务A所读取

过的数据,而事务A再次读的时候就和第一次读的时候有所变化那;所以才有了脏读,幻读,不可重复读的 问题

 3.事务的隔离级别
在企业应用中,事务往往存在于并发执行的环境当中,那么如果做到并发事务之间完全的isolation,做到对于以上四大问题完全解决,那么势必会影响程序的performancescalability,因此减弱这种完全的isolation,而带来的就是performancescalability的提高。因此事务的隔离级别根据以前的四大问题有四种。
(1)read uncommitted isolation:
不允许(1)问题存在,允许(2)问题存在。写事务执行时不允许同时有其他的写事务并发执行。
(2)read committed isolation:
不允许(2)问题存在,允许(3)问题存在。读事务允许其他事务并发执行,没有提交的写事务执行时不允许同时有其他并发事务执行。
(3)repeatable read isolation:
不允许(3)问题存在,允许(4)问题存在。读事务不允许写事务并发执行,没有提交的写事务执行时不允许同时有其他并发事务执行。
(4)serializable:
完全解决问题。<o:p></o:p>

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值