面试官:你是怎么理解InnoDB引擎中的事务的?
候选者:在我的理解下,事务可以使「一组操作」要么全部成功,要么全部失败
候选者:事务其目的是为了「保证数据最终的一致性」。
候选者:举个例子,我给你发支付宝转了块红包。那自然我的支付宝余额会扣减块,你的支付宝余额会增加块。
候选者:而事务就是保证我的余额扣减跟你的余额增添是同时成功或者同时失败的,这样这次转账就正常了
面试官:嗯,那你了解事务的几大特性吗?
候选者:嗯,就是ACID嘛,分别是原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。
候选者:原子性指的是:当前事务的操作要么同时成功,要么同时失败。原子性由undolog日志来保证,因为undolog记载着数据修改前的信息。
候选者:比如我们要insert一条数据了,那undolog会记录的一条对应的delete日志。我们要update一条记录时,那undolog会记录之前的「旧值」的update记录。
候选者:如果执行事务过程中出现异常的情况,那执行「回滚」。InnoDB引擎就是利用undolog记录下的数据,来将数据「恢复」到事务开始之前
候选者:一致性我稍稍往后讲,我先来说下隔离性
面试官:嗯…
候选者:隔离性指的是:在事务「并发」执行时,他们内部的操作不能互相干扰。如果多个事务可以同时操作一个数据,那么就会产生脏读、重复读、幻读的问题。
候选者:于是,事务与事务之间需要存在「一定」的隔离。在InnoDB引擎中,定义了四种隔离级别供我们使用:
候选者:分别是:readun