跳至主要內容

事务的ACID特性

张威大约 3 分钟mysql事务

事务的ACID特性

ACID特性

每一个事务必须满足下面的4个特性:

  • 原子性(Atomic):事务是一个不可分割的整体,事务必须具有原子特性。当修改数据时,要么全执行,要么全不执行,即不允许部分事务完成

  • 一致性(Consistency):事务执行之前和执行之后,数据库数据必须保持一致性状态。数据库的一致性状态必须由用户来负责,由并发控制机制实现。拿银行转账来说,只有让一个用户的余额减少,又让一个用户的余额增加才能构成一个完整的事务

  • 隔离性(Isolation):当两个或者多个事务并发执行时,为了保证数据的安全性,将一个事物内部的操作与其它事务的操作隔离起来,不被其它正在执行的事务所看到,使得并发执行的各个事务之间不能互相影响。隔离级别:数据的安全性和事务的并发性。隔离越严格,安全性越高,并发性越低(就是并发控制,保证数据安全)

  • 持久性(Durability)事务完成(事务commit成功)以后,DBMS保证它对数据库中的数据的修改是永久性的,即使数据库因为故障出错,也应该能够恢复数据

InnoDB 引擎通过什么技术来保证事务的这四个特性的呢?

DB写数据都是先在cache缓存上写的(因为速度快),然后操作系统通过磁盘I/O往磁盘上写,当然后cache再慢慢往磁盘上写数据。由于用户会写很多数据,所以commit不会等着这些数据从缓存全部写到磁盘再返回,因为要经过磁盘I/O,业务上不可能让用户去等那么长时间

  • 持久性是通过 redo log (重做日志)来保证的
  • 原子性是通过 undo log(回滚日志) 来保证的
  • 隔离性是通过 MVCC(多版本并发控制) 或锁机制来保证的
  • 一致性则是通过持久性+原子性+隔离性来保证

事务的ACD特性由redo log和undo log机制保证,事务的I特性由事务的锁机制来保证,锁粒度越大,事务隔离性越好,安全性越高,并发性越低,效率越低