MySQL事务详解(读写锁+MVCC)

本文详细介绍了MySQL事务的ACID特性,以及事务的四种隔离级别,重点讲解了InnoDB存储引擎中如何通过读写锁和MVCC实现事务隔离。内容涵盖了读写锁的工作原理,两种读取数据的方法——一致性非锁定读和锁定读,以及如何通过Read View和Undo Log实现MVCC。此外,还讨论了不同隔离级别下如何避免并发问题,如脏读、不可重复读和幻像读。
摘要由CSDN通过智能技术生成


在数据库中,我们将我们的指定的一些操作设置为一个事务。

事务的四大特性ACID

  • Atomocity:原子性,一个事务中的所有操作,要么全部完成,要么全部失败。
  • Consistency:一致性,一个或多个事务执行后,原来一致的数据和数据库仍然是一致的。银行转账前后,金额的总额不改变。
  • Lsolation:隔离性,数据库开启一个事务时,不会受到其他事务对数据操纵导致数据不一致。多个事务并发互不影响。
  • Durability:持久性,事务提交后,对数据库中的数据的修改是永久的。它无法通过回滚或者任何方式来进行恢复。

而事务的ACID是通过InnoDB日志来保证。

  • 事务的隔离性是通过数据库锁+MVVC的机制实现的。
  • 事务的持久性通过redo log(重做日志)来实现。
  • 原子性和一致性通过Undo log(回撤日志)来实现.

Undo Log保存了事务发生之前的数据的一个版本,为了满足事务的原子性,在事务前备份数据到Undo Log,然后进行数据的修改。如果出现了错误或者用户执行了roll back语句,系统可以利用Undo Log的数据进行恢复。

Redo log确保事务的持久性。防止在发生故障的时间点,尚有脏页未写入磁盘,在重启mysql服务的时候,根据redo log进行重做,从而达到事务的持久性这一特性。

事务的隔离级别

MySql5.5后使用的是InnoDB引擎,它默认隔离级别是可重复读的

Orcale默认隔离级别是读已提交

MySQL数据库共定义了四种隔离级别

  1. Serializable(串行化):可避免脏读、不可重复读、幻像读取情况的发生。
  2. Repeatable read(可重复读):可避免脏读、不可重复读情况的发生。
  3. Read committed(读已提交):可避免脏读情况发生。
  4. Read uncommitted(读未提交):最低级别,以上情况均无法保证。

脏读:事务T1对数据进行修改,但未提交;事务T2进行数据读取,读取到修改但未提交的数据;事务T1进行回滚,取消了数据的修改,事务T2之前读取的数据为无效数据。

不可重复

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值