详述详述MySQL事务的实现原理事务的实现原理
在讲解前我想先抛出个问题:
事务想要做到什么效果?
按我理解,无非是要做到可靠性以及并发处理。
可靠性:数据库要保证当insert或update操作时抛异常或者数据库crash的时候需要保障数据的操作前后的一致,想要做到这
个,我需要知道我修改之前和修改之后的状态,所以就有了undo log和redo log。
并发处理:也就是说当多个并发请求过来,并且其中有一个请求是对数据修改操作的时候会有影响,为了避免读到脏数据,所
以需要对事务之间的读写进行隔离,至于隔离到啥程度得看业务系统的场景了,实现这个就得用MySQL 的隔离级别。
下面我首先讲实现事务功能的三个技术,分别是日志文件(redo log 和 undo log),锁技术以及MVCC,然后再讲事务的实现原
理,包括原子性是怎么实现的,隔离型是怎么实现的等等。最后在做一个总结,希望大家能够耐心看完
redo log与undo log介绍
mysql锁技术以及MVCC基础
事务的实现原理
总结
redo log 与 undo log介绍
1. redo log
什么是redo log ?
redo log叫做重做日志,是用来实现事务的持久性。该日志文件由两部分组成:重做日志缓冲(redo log buffer)以及重做日志
文件(redo log),前者是在内存中,后者在磁盘中。当事务提交之后会把所有修改信息都会存到该日志中。假设有个表叫做
tb1(id,username) 现在要插入数据(3,ceshi)
starttransaction; selectbalancefrombankwherename="zhangsan";//生成重做日志
balance=600updatebanksetbalance= balance-400;//生成重做日志
amount=400updatefinancesetamount =amount+400;commit;
评论0