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多条数据出现新条目的问题。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值