MySQL ACID知识总结

本文主要总结一些原理和理论相关的一些知识:

数据库的ACID特性

A – Atomicity 原子性: 一次数据库的事务,要么全部执行,要么都执行,不能只发生一次操作。 数据库事务的内在要求

C – Consistency 一致性: 数据保持一致性状态,数据的数目可以发生改变,但是本身的数据结构不变,数据特性不变。A有800,B有200,A转给B 200,在这个过程中,AB的总钱数保持不变

I – Isolation 隔离性:基于并发处理的事务操作之间必须相互隔离,一个事务的操作不能影响另一个事务。这里可能需要通过加锁,保证事务之间不会相互影响

D – Duration 持久性:所有对于数据的修改都是永久的。

4种基本的隔离类型

  1. 读未提交(Read Uncommitted):事务中的修改,即使没有提交也可以读取。产生脏读

  2. 读已提交(Read Committed): 一个事务只有在已提交之后才可以再读取。会导致不可重复读(内涵:不能够读一个数据两次,不然可能会产生不一样的结果,但是一次读的事务操作应该依赖于它第一次读的数据),其中不可重复读主要无法解决的是update操作。

  3. 可重复读:保证在一个事务内,读同一条数据两次不会发生变化,主要针对update操作优化。但是会导致幻读,幻读指的是,在select多行数据时,如果此时insert一条新的数据,那么可能会读到这个新insert的那一行。也就是,这一行在读开始的时候不存在(幻 – 虚幻),但读的过程中突然出现。

  4. 串行化:事务在读取数据时,必须加表级共享锁;事务在修改数据时,必须加表级排它锁,保证写的原子性

这几个数据级别主要解决的问题分别是:

  • 读未提交:啥也没解决,性能好
  • 读已提交:解决了select到未提交的数据的问题。
  • 可重复读:解决了select一条数据两次可能出现不同结果的问题。
  • 串行化:解决了select多条数据出现新条目的问题。

猜你喜欢

转载自blog.csdn.net/qq_41989109/article/details/105694012