事务是一组操作的集合,这些操作必须作为⼀个不可分割的单元执⾏,即要么全部执⾏成功,要么全部失败回滚。事务通常涉及到对数据库中的数据进⾏读写操作。
事务的 ACID 特性指四个关键特征:
原⼦性(Atomicity)、⼀致性(Consistency)、隔离性(Isolation)和持久性(Durability)。
- 原子性(Atomicity):事务是⼀个原⼦操作,要么全部提交,要么全部回滚。当⼀个事务执⾏期间发⽣故 障,操作系统会⾃动将其回滚到事务执⾏之前的状态,保证数据的⼀致性。
- ⼀致性(Consistency):事务执行结束后,数据必须保持⼀致性状态。在事务执⾏期间,数据库中的数据可 以处于中间状态,但在事务完成时必须保证数据的⼀致性。
- 隔离性(Isolation):数据库系统必须保证事务之间相互隔离,不会互相⼲扰。隔离级别不同,会影响到事务的并发性和数据⼀致性,⽐如出现脏读、不可重复读、幻读等问题。
- 持久性(Durability):⼀旦事务提交,其所做的修改必须永久保存到数据库中。即使系统发⽣故障或宕机,数据也能够保持不变。
例子:
A 向 B 转账 500,转账成功,A 扣除500块,B增加了500块,
- 原子操作体现要么都成功,要么都失败
- 在转账的过程中,数据要一致,A 扣除了500,B就必须增加500
- 在转账的过程中,隔离性体现在A 向 B 转账,不能受其他的事务干扰
- 在转账的过程中,持久性体现在事务提交后,要把数据持久化
InnoDB 引擎通过什么技术来保证事务的这四个特性的呢?
- 持久性是通过 redo log (重做日志)来保证的;
- 原子性是通过 undo log(回滚日志) 来保证的;
- 隔离性是通过 MVCC(多版本并发控制) 或锁机制来保证的;
- 一致性则是通过持久性+原子性+隔离性来保证;