事务将应用程序的读写绑定在一起称为一个逻辑操作单元,整个事务要么成功(提交),要么失败(中此或回滚)。

ACID 的含义,A 原子性,C 一致性, I 隔离性,D 持久性

BASE 的含义,B Base Available 基本可用,S Soft state 软状态,E Eventual consistency 最终一致性

深入理解事务

原子性
原子性描述的是当一个客户端的一次多个写操作时,多个写操作要全部完成,一旦有一个失败就全部回滚掉。

一致性
一致性描述的是任何数据的修改都应该保持恒等的条件。例如银行的贷款余额和借款余额是要保持一致的。
(这里的一致性更依赖于应用层,数据库很难检测到,数据库做的更多的是数据存储)

隔离性
大多数数据库支持多个客户端同时连接,当多个客户端同时访问同一条数据时,会带来并发问题。隔离性意味着多个事务相互隔离,不能交叉,经典的有串行化。

持久性
一旦事务提交成功,即使存在硬件故障或数据库崩溃,事务所写入的数据也不会崩溃。

弱隔离级别

读提交

  • 读数据库时,只能看到已成功提交的数据,防止脏读
  • 写数据库时,只会覆盖已成功比较的数据,防止脏写

串行化

解决并发问题,最好的办法是避免并发。串行化就是基于这样的概念来实现的。

两阶段加锁

如果有两个事物对同一个数据进行写操作时,通过加锁来实现,必须等前一个事物提交或中止才可以获得锁。

间隙锁

next-key locking