数据库事务

首先回顾一下事务的四大特性: 原子性,一致性,隔离性,持久性

事务是与数据库交互的基本的执行单元,事务的原子性说明事务要么完全执行,要么不执行(无论一个事务有多少条命令,都要看作一个整体),不存在中间状态,

这样就避免了许多不确定的情况。

原子性举例: 以转账为例,A向B转账100元,包含两个操作 1. A的账户减少100;2. B的账户增加100,这两个操作都必须执行才能保证结果正确,其中操作1,2都是原子的,

但1和2之间是可以中断的(转账过程中到账的延迟),只要保证1,2最终都被执行即保证一致性就可以保证最后结果的正确性。

但是在并发情况下,上述情况可能就会出现错误。

为了保证并发情况下的一致性,引入了隔离性,即保证每一个事务能够看到的数据总是一致的,就是多个事务并发执行后的状态,和它们串行执行后的状态是等价的。

隔离性分为四个等级:

1 读未提交:(Read Uncommitted):会导致 脏读,不可重复读,幻读

2 读已提交(Read Committed) 大多数数据库默认的隔离级别:在1的基础上避免了脏读     

3 可重复读(Repeatable-Read) mysql数据库所默认的级别:在2的基础上避免了不可重复读   
4 序列化(serializable)(锁表) 可以解决所有的一致性的问题,但是效率太低

为了实现隔离性,又引入了锁的概念,锁分为悲观锁和l乐观锁

悲观锁就是假设并发状态下数据的访问一定会出现问题,所以用所来实现互斥访问,同时为了尽可能提高性能,发明了各种粒度(数据库级/表级/行级……)的锁,以及各种性质的锁(比如 互斥锁/读锁 等)。比如上面的du

乐观锁,即不同的事务可以同时看到同一对象(一般是数据行)的不同历史版本,如果有两个事务同时修改了同一数据行,那么在较晚的事务提交时进行冲突检测。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值