数据库事务底层原理

参考与:https://www.cnblogs.com/takumicx/p/9998844.html

数据库事务特性:

ACID 

原子性:指的是我们的操作不可分,要么执行成功,要么执行失败。

隔离性:事务之前互相隔离互不影响

一致性:系统从一个一致性状态变成另一个一致性状态,系统状态满足完整性约束,(转账前后总金额不变)

持久性:事务一旦提交,对数据库的更新就会持久保存到数据库中,任何事务和系统故障都不会导致数据丢失。

 

而事务的底层就是为了保证这四个特性,使用到两种技术

1、日志恢复     2、并发控制

并发控制技术保证了事务的隔离性,使数据库的一致性状态不会因为并发执行的操作被破坏。
日志恢复技术保证了事务的原子性,使一致性状态不会因事务或系统故障被破坏。同时使已提交的对数据库的修改不会因系统崩溃而丢失,保证了事务的持久性。

数据库事务底层原理_第1张图片

 

并发控制

首先介绍一下 并发异常

1、脏读

2、不可重复读

3、幻读

数据库的隔离级别

1、读未提交

2、读已提交

3、可重复读

4、序列化

mysql的Innodb存储引擎通过Next-Key Locking技术在可重复读级别就消除了幻读的可能。

快照隔离是多版本并发控制(mvcc)的一种实现方式。(乐观锁)

https://blog.csdn.net/w2064004678/article/details/83012387

 

日志恢复

两种情况 

  • 在事务提交前出现故障,但是事务对数据库的部分修改已经写入磁盘数据库中。这导致了事务的原子性被破坏。
  • 在系统崩溃前事务已经提交,但数据还在内存缓冲区中,没有写入磁盘。系统恢复时将丢失此次已提交的修改。这是对事务持久性的破坏。

日志恢复的核心思想

  • 撤销事务undo:将事务更新的所有数据项恢复为日志中的旧值,事务撤销完毕时将插入一条记录。

  • 重做事务redo:将事务更新的所有数据项恢复为日志中的新值。

既有start记录又有commit记录,将会对事务T0进行重做,执行相应的redo操作。
只有start记录,将会对T1进行撤销,执行相应的undo操作,撤销完毕将写入一条abort记录。

 

 

 

你可能感兴趣的:(数据库)