在上一章,我讲解了MySQL锁的相关内容。主要谈到了全局锁、表锁、行锁以及死锁等。通过这些学习,相信我们可以理解锁的原理,并在工作中降低锁冲突的概率。这也是优化数据库必须掌握的知识点。从本节开始,将进入一个新的MySQL知识大类:MySQL事务。什么是事务?根据《高性能MySQL》第3版1.3事务一节中定义:事务就是一组原子性的SQL查询,或者说一个独立的工作单元。如果数据库引擎能够成功地对数据库应用该组查询的全部语句,那么就执行该组查询。如果其中有任何一条语句因为崩溃或其他原因无法执行,那么所有的语句都不会执行。也就是说,事务内的语句,要么全部执行成功,要么全部执行失败。看上面的文字可以稍微抽象了一点,可以结合生活中的一个例子:比如你给朋友转账元,其大致过程是:从你的账户扣除元,然后再到你朋友的账户中增加元,试想,如果在这中间,因为网络问题或者程序问题,导致在你的账户中扣除了,但是没有在你朋友的账户中增加,那岂不是乱套了。所以,类似这种情况,就可以把这两个步骤放到一个事务里面。要么全部成功,也就是从你的账户扣除之后,然后在你朋友账户中新增;要么全部失败,比如在中间出现问题,会回滚这中间所有的变更。大致操作步骤如下表:一个良好的事务处理系统,必须具备ACID特性:atomicity(原子性):要么全执行,要么全都不执行;consistency(一致性):在事务开始和完成时,数据都必须保持一致状态;isolation(隔离性):事务处理过程中的中间状态对外部是不可见的;durability(持久性):事务完成之后,它对于数据的修改是永久性的。InnoDB采用redolog机制来保证事务更新的一致性和持久性。什么是redolog?下面来一起看下:2RedologRedolog称为重做日志,用于记录事务操作变化,记录的是数据被修改之后的值。Redolog由两部分组成:内存中的重做日志缓冲(redologbuffer)重做日志文件(redologfile)每次数据更新会先更新redologbuffer,然后根据innodb_flush_log_at_trx_
转载请注明:http://www.aierlanlan.com/rzgz/8505.html