MySQL----事务的ACID特性、并发引起的事务问题及相关的事物隔离级别

1. 事务的四大特性(ACID)

A:原子性(atomicity),事务要么全部执行,事务要么全部不执行。
C:一致性(consistency),事务执行前后数据库整体状态保持一致。
I:隔离性(isolation),对于串行事务来说没有影响,对并行的事务使用相同的数据的时候在不同的数据空间对数据进行操作,并保持自身操作不受到外在数据改变干扰。
D:持久性(durability),事务的提交是永久保存在数据库中的,哪怕 数据库断电恢复后数据也应该是保持不变的。


2. 并发操作有可能会引发的三种问题

问题1:
脏读:
事务A与B同时进行,事务A和B使用同一个数据c,事务B提前对数据c内容进行修改(没有commit,修改在cache中),然后事务A再读取数据c(先从cache中找c),这时数据c已经和原来不同了。如果事务B再回滚,那么事务A读到的数据就是原先不存在的数据,脏数据!
解决方法:
已提交读 可以解决脏读的问题


问题2:
不可重复读: 事务A,B同时进行,事务A先使用到数据a(9000块),这时事务B对数据a进行更新数据a(5快钱),事务A再重新使用数据a,就会出现数据前后不一致的情况。
解决方法:
可重复读可以解决不可重复读的问题。


问题3:
幻读: 事务A按同一个条件进行查询,然后事务B在事务A两次查询的中间,进行了数据增多或减少操作,导致事务A前后查询出来的结果不同。
解决方法
串行化可以解决幻读问题


3.数据库的四种事务隔离级别

未提交读: 脏读,不可重复读,幻读都会出现,并行操作快,资源负担小。
已提交读: 避免了脏读,其余仍会发生,相当于是在更新一个数据内容时,会上锁,其他使用数据的对象需要排队等待锁释放(数据更新完毕)再进行。大多数数据库默认的事务隔离级别,MySQL不是这个。
可重复读: 避免了脏读和不可重复读,先进行的事务使用到的数据,其他事务要修改需要排队等待。MySQL默认的事务隔离级别。
串行化: 将所有事务进行排序串行,一个一个进行,都不存在并行了,自然也不会存在并行问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值