前言
本文主要包含5个内容:
- 为什么引入事务?
- 什么是事务?
- 事务的ACID以及实现原理
- 并发异常和并发控制技术
- 故障与故障恢复技术
事务
事务常见的面试题
- 什么是事务?事务的隔离级别有哪些?
- 事务的每个隔离级别会引发什么问题?mysql默认的是哪个隔离级别?
- mysql有哪些锁?
- 数据库崩溃时事务的恢复机制(redo日志和undo日志)
事务的特点(ACID)
- 原子性(Atomicity):事务中的所有操作作为一个整体像原子一样不可分割,要么全部成功,要么全部失败。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
- 一致性(consistency):事务的执行的前后数据的完整性保持一致,事务的执行结果必须使数据库从一个一致性状态到另一个一致性状态。
- 隔离性(Isolation):并发执行事务不会相互影响,其对数据库的影响和它们串行时执行时一样。比如多个用户同时往一个账户转账,最后账户的结果应该和他们按照先后次序转账结果一样。—通过锁来实现
- 持久性(Durability):事务一旦提交,其对数据库的更新是持久的,任何事务或者系统故障都不会导致数据丢失。
在事务的四个特点中,一致性是事务的根本追求,而在某些情况下会对事务的一致性造成破坏,如:
- 事务的并发执行
- 事务故障或者系统故障
数据库系统通过并发控制技术和日志恢复技术来避免这种情况的发生
- 并发控制技术保证了事务的隔离性,使得数据库的一致性状态不会因为并发执行的操作而被破坏。
- 日志恢复技术保证了事务的原子性,使得一致性状态不会因为事务或者系统故障而被破坏,同时使已提交的对数据库的修改不会因为系统崩溃而丢失,保证了事务的持久性。
总结就是:并发控制来保证隔离性、一致性
日志恢复技术来保证一致性、原子性、持久性

事务的实现原理
- 事务的原子性是通过undo log来实现的
- 事务的持久性是通过redo log来实现的
- 事务的隔离性是通过(读写锁+MVCC)来实现的
- 事务的一致性是通过原子性、持久性、隔离性来实现的
MySQL中的日志分类
mysql中日志主要分为三类:
- undo log(回滚日志)
- redo log(重做日志)
- binlog(二进制日志)
其中redo log和undo log是归属于Innodb存储引擎特有的
undo log
在数据库事务开启之前,会将要修改的日志放在undo日志里面,当事务回滚或者数据库崩溃的时候,可以利用undo日志,撤销未提交的事务对数据库产生的影响

被折叠的 条评论
为什么被折叠?



