一、
InnoDB
实现事务四大特性
原子性
(Atomicity)
:原子性指整个数据库事务是不可分割的工作单位。事务中所有的数据库
操作,要么全部提交成功,要么全部失败回滚。
一致性
(Consistency)
:数据库总是从一个一致性的状态转换到另一个一致性的状态。
隔离性
(Isolaon)
:事务的隔离性要求每个读写事务的对象对其他事务的操作对象能相互分
离,即该事务提交前对其他事务都不可见。
持久性
(Durability)
:事务一旦提交,其结果是永久性的,即使发生宕机等故障,数据库也
能将数据恢复。
二、
InnoDB
的实现原理
(一)
InnoDB
如何保证原子性
(Atomicity)
?
在事务里任何对数据的修改都会写一个
undo log
,然后进行数据的修改,如果出现错误,
存储引擎会利用
undo log
的备份数据恢复到事务开始之前的状态。
(二)
InnoDB
如何保证一致性
(Consistency)
?
事务的原子性和隔离性保证了数据的一致性
(三)
InnoDB
如何保证隔离性
(Isolaon)
?
InnoDB
的默认隔离级别
REPEATABLE READ + Next-Key Locking
,
InnoDB
锁与
MVCC
机制保证
了数据库的隔离性,不出现并发一致性问题,且理论上效率高于
SERIALIZABLE
隔离级别。
(四)
InnoDB
如何保证持久性
(Durability)
?
InnoDB
存储引擎在启动时不管上次数据库运行时是否正常关闭,都会尝试通过
redo log
进
行恢复操作。
三、并发一致性问题
脏读:读到未提交的数据
不可重复读:读到已提交的数据;同样的条件,第一次与第二次读的值不同。
幻读:同样的条件,第一次与第二次读出来的记录不同。
丢失修改 : 事务
2
提交的结果破坏了事务
1
提交的结果
,
导致事务
1
进行的修改丢失。
四、隔离级别
READ UNCOMMITTED
(读未提交):事务中的修改,即使没有提交,对其它事务也是可见
的。任何操作都不加锁。
READ COMMITTED
(读已提交):一个事务只能读取已经提交的事务所做的修改。换句话
说,一个事务所做的修改在提交之前对其它事务是不可见的。数据的读取不加锁,但数据
的写入、修改和删除都加锁。
REPEATABLE READ
(可重复读):保证在同一个事务中多次读取同样数据的结果是一样的。
MVCC
机制让数据变得可重复读。
SERIALIZABLE
(可串行化):强制事务串行执行。全部操作加悲观锁。读加共享锁,写加排
他锁。
五、
Undo log
Undo
意为取消,以撤销操作为目的,返回指定某个状态的操作。
(
1
)
Undo log
指事务开始之前,在操作任何数据之前
,
首先将需操作的数据备份到一个地
评论