数据库事务隔离级别及四大特性

数据库事务隔离级别及四大特性

- 四大特性

  • (1)原子性(Atomicity)
    原子性指的是事务操作要么全部成功,要么全部回滚。简单的来说就是操作成功,就完全应用到数据库中;操作失败,则不影响到数据库中的数据。

  • (2)一致性(Consistency)
    一致性指的是一个事务执行前后必须保持一致性状态。
    打个比方:AB两人在银行的总金额为1000,他们之间不管如何转账,转账多少次,他们的总金额应该不变。

  • (3)隔离性(Isolation)
    隔离性是指在并发访问数据库,在操作同一张表的时候,事务之间应该互不影响。
    比如:有两个并发的事务T1、T2,在T1看来,T2要么在T1开始之前结束,要么就在T1结束之后开始,T2也是一样。

  • (4)持久性(Durability)
    持久性是指一个事务一旦提交,那么对数据库中数据影响就是永久性的,即使数据库系统崩溃的情况数据也不会丢失。
    比如:在传统的jdbc事务中,在提交事务完成后,提示用户操作成功;即当我们看到提示信息的时候就可以肯定的任务数据已经更新到数据库中了

四个隔离级别

说隔离级别之前,我们应该先说下事务中的三个问题

  • (1)脏读
    脏读就是读取到了未成功提交到数据库中的数据。
    比如:有两个事务T1,T2,T1开始对表开始进行增删改操作,开始提交事务,此时T2开始对该表进行查询,某一刻,T1事务发生了异常,造成回滚。但T2已经读取到了T1回滚之前的数据,即数据库中不存在的数据,因此称之为脏读。

  • (2)不可重复读
    不可重复读就是同一个事务T1,连着两次读取到的数据都不一样。
    比如:事务T1读取到一次数据之后,开始读取第二次的时候,另一个修改事务T2立马对数据进行了更新操作,导致T1第二次读取的数据是更新后的数据,造成了重复读读取的数据不一致。

  • (3)幻读
    幻读就是一个事务T1对数据表中的一行数据进行修改后,查询该修改情况是,发现修改并未成功,其实是另一个事务T2对该表增加了一条与修改数据一模一样的数据,从而让事务T1造成并未修改成功的假象。

  • (4)总结

  • 脏读和不可重复读的区别:
    脏读读取的是未成功提交的数据,而不可重复度读取的是已提交了的数据

  • 不可重复读和幻读的区别:
    不可重复读针对的是同一个表中的同一条数据,幻读针对的是同一个表中多条数据
    不可重复读侧重于update,而幻度侧重于insert

针对上述问题,事务设置了四个隔离级别(级别从低到高介绍)

  • 查看数据库的隔离级别的指令

  • (1)Read uncommitted(读未提交)
    该级别就是什么都不处理,会发生上述的三大问题,但效率最高

  • (2)Read committed(读已提交)
    该级别只处理了脏读

  • (3)Repeatable read(可重复读)
    该级别处理了脏读、不可重复读,mysql的默认隔离级别

  • (4)Serializable(序列化)
    处理了三大问题,但效率最低

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值