事务的隔离级别

  • 什么是事务:

    多个数据库操作构成的一个逻辑单位

  • 事务的四大特性ACID:

    1.原子性Atomic:事务中的操作,任一失败操作都会导致整个事务的失败
    2.一致性Consistent:事务结束后,系统状态是一致的。
        例子:10个人,每人一个账户,里面有钱,互相转来转去,这组成一个数据系统。10人的账号总金额不变,就满足一致                           性,数据库中如果存在没有执行完的事务,就不一致。
    3.隔离性Isolated:并发执行的事务,互不干扰,如果事务没有commit,修改的数据,其他事务无法看到
    4.持久性Durability:事务提交后,不管发生什么,改动都不会丢失。

  • 如果不隔离,可能出现的问题

    1.脏读:
        例子:事务A:乙往甲账户转100元,但没提交
            事务B:甲查看余额,为100,这时候就出现了脏读。
        即一个事务在处理过程中读取了另一个事务未提交的数据。
    2.不可重复读:
        例子:事务B:甲查看余额,为0元 -->事务A:乙往甲账户转100元,且提交
            -->事务B:再次查看,为100元,即这时就出现了不可重复读
        即一个事务读取了另一个事务提交的数据,有时,不可重复读不是问题。针对同一数据项
    3.幻读:
        例子:事务B:甲老师查询学生人数 -->事务A:乙老师添加了一个学生
        -->事务B:甲老师查询学生人数发现多了一个,出现了幻读
        也是一个事务读取了另一个事务提交的数据。针对一批数据整体

  • 隔离级别:

    为了解决上面的问题,可为数据库设置隔离级别,级别从低到高,越高效率越低
    1.读未提交:
        事务未提交,他的变更可以被其他事务所见。 --很少被使用
    2.读已提交:
        事务提交后,才能被其他事务所见。 解决脏读。
        oracle的默认级别
    3.可重复读:
        多次读取同一范围数据,仍然返回第一次读的数据的快照。解决了不可重复读。
        mysql的默认级别
    4.串行化:
        “写”会加“写锁”,“读”会加“读锁”,当读写锁冲突时,后面的事务必须等前一事务处理完才继续执行。 --很少被使用
        
        


            

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值