总结一下事务和事务隔离级别
Posted new一个对象777
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了总结一下事务和事务隔离级别相关的知识,希望对你有一定的参考价值。
事务 ACID 包括
- 原子性:要么全部成功,要么全部失败回滚。
- 一致性:可以理解为“守恒”,例如银行转账,你将从你的账户转账300元给小明,现在你已经扣除了300元,但是此时服务器宕机了,你的300元已经扣除了,但是小明却没有收到300元。这就说明已经不守恒了,也就是数据不一致的情况发生了。其实避免非一致性的事情发生的前提措施就是原子性和隔离性还有持久性。
- 隔离性:主要是用于并发环境下,多个并发之间的事务是相互隔离的,各个事务之间互不影响。
- 持久性:一旦事务提交了,数据就会永久的存储到磁盘。
正是由于事务的ACID特性才能保证数据的安全性和稳定性。
mysql中有四种事务隔离级别,由低到高分别是:
- 读未提交:当事务A访问数据的时候事务B可以读到事务A未提交的数据,称为脏读。
- 读已提交:只能读取其他事务已经提交的数据,如果事务A将数据从1更新到10那么事务B读到的就是10,如果此时事务C将数据从10更新到30,那么事务B读取到的就是30,出现不可重复读和幻读的情况。
- 可重复读:当一个事务在操作一个数据的时候,其他事务不准读和写此数据,对该数据上锁。在这个事务内读取到的数据都是一致的。但也是会发生幻读的情况。例如当前事务A提交之后,有其他的事务对该数据进行更新,事务A再来读取的时候数据已经发生改变,出现幻读。
- 串行化:事务隔离的最高级别,只允许事务串行执行,不会发生非法操作,很安全,但是效率很低。
MySQL默认的是可重复读。
加深理解:
- https://blog.csdn.net/weixin_36979214/article/details/104794592
- https://blog.csdn.net/zhouym_/article/details/90381606
以上是关于总结一下事务和事务隔离级别的主要内容,如果未能解决你的问题,请参考以下文章