前言
什么是事务
数据库事务(transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。
首先我们需要明确几个前提:
-
如果执行多条SQL语句,这些语句对数据库的操作不是原子性的。
-
一个事务分为:开启、执行、提交三个阶段。
-
只有事务提交了数据才算做有效。
为什么要有事务
数据库事务存在的意义就是保证对数据库操作的准确性 , 保证数据库操作准确性的便是事务的
四大特性
原子性:事务开始后的所有操作要么成功要么失败
一致性:事务的一致性是指事务的执行不能破坏数据库数据的完整性和一致性,一个事务在执行之前和执行之后,数据库都必须处以一致性状态。
隔离性:事务的隔离性是指在并发环境中,并发的事务是互相隔离的,一个事务的执行不能被其它事务干扰。也就是说,不同的事务并发操作相同的数据时,每个事务都有各自完整的数据空间。
持久性:事务的持久性是指事务一旦提交后,数据库中的数据必须被永久的保存下来。即使服务器系统崩溃或服务器宕机等故障。只要数据库重新启动,那么一定能够将其恢复到事务成功结束后的状态
正文
实际上,我们研究事务的原理,就是研究MySQL的InnoDB引擎是如何保证事务的四大特性的。
而对于这四大特性,实际上分为两个部分。 其中的原子性、一致性、持久性,实际上是由InnoDB中的两份日志来保证的,一份是redo log日志,一份是undo log日志。 而隔离性是通过数据库的锁, 加上MVCC来保证的
下面着重说下这两个日志的作用
一、重做日志 redo log
1. 作用
记录事务提交时数据页的物理修改, 用来实现事物的持久性 .当事