事务的理解

1 事务的作用:

   当同一个操作需要多条sql执行,一条执行失败,其余哪怕执行成功了也要回滚数据;除非所有的sql都完美的执行成功了。需要用一个事务把这一系列的sql执行概括成为一个整体,这个整体的特性如下:

    A原子性--强调这些操作的不可再分的特性;

    C一致性--强调这些操作的执行结果应该是正确的;

    I隔离性--强调多个事务应该是可以并发的、且是一致的;

                  并发的事务需要考虑的问题有:数据的一致性。

    D持久性--强调事务执行的数据最终是可以被放到数据库中的;

2 详细说明事务的隔离性

   隔离性需要考虑数据的三种情况,分别是:

       脏读-- 一个事务尚未提交,但它的数据却被另一个事务读取。这是不允许出现的!!!

       不可重复读-- 一个事务被提交后,被另外一个事务读取。但这条数据又被修改了,所以会造成数据的不一致性。(使用          行锁)

       幻读--事务A读取若干行后,事务B以插入或者删除行的方式修改事务A读取的若干行,并提交,会造成数据的不一致性。(使用表锁)。

   隔离等级:一个事务必须与其它事务进行资源或数据更改相隔离的程度。从允许并发副作用的角度考虑。(来自百度百科)

         未提交读(不能避免幻读以及其它)

         已提交读(避免脏读,不能避免不可重复读和幻读)

         可重复读(避免脏读和不可重复读,不能避免幻读)

         序列化(避免脏读、不可重复读、幻读)

         

        注:图片来自图解 & 深入浅出JavaWeb:事务必会必知

3 锁的分类:

   为了处理隔离性的问题,隔离等级通过锁的机制来控制并发线程。

   共享锁:加了共享锁的数据库对象可以被读取,但是不可以被其它线程写入。

   独占锁:加了独占锁的数据库对象,既不可以被读取也不可以被写入。


   

 “

事务隔离级别是并发控制的整体解决方案,其实际上是综合利用各种类型的锁和行版本控制来解决并发问题。

锁是数据库并发控制的内部机制,是基础

对用户来说,只有当事务隔离级别无法解决一些并发问题和需求时,才有必要在语句中手动设置锁,不恰当的设置锁可能导致严重的阻塞和死锁。建议在完全了解锁机制的情况下,才可以再语句中手动设置锁,否则应该使用事务隔离级别。

”  ----------------来自   事务隔离级别和锁的关系

    

   

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值