Mysql底层剖析——事务特性与隔离级别

本文详细介绍了数据库事务的ACID特性,包括原子性、一致性、隔离性和持久性,并探讨了不同隔离级别的概念及其对并发的影响。脏读、不可重复读和幻读是并发控制中的经典问题,分别阐述了它们的定义和区别。此外,还讨论了死锁的概念,通过示例展示了死锁发生的情况。了解这些知识对于优化数据库性能和保证数据一致性至关重要。
摘要由CSDN通过智能技术生成

一、事务的特性(ACID)

四大特性都是为了保证一致性
原子性:要么全部完成,要么全部回滚,不能只执行一部分。
一致性:数据库事务总是从一个一致性的状态转换到另一个一致性的状态。
隔离性:一个事务所做的修改在commit之前,对其他的事务是不可见得。
持久性:事务被提交后就一直就会被永久的保留在数据库中。

二、隔离级别

未提交读
事务中的修改,即使没有提交对其他事务也都是可见的。可以读取未提交的数据也就是脏读

提交读(不可重复度)
一个事务开始到提交之前,所做的任何修改其他事务都是不可见的。

可重复读
解决了脏读的问题

可串行化
通过强制事务串行执行,避免幻读的问题。会在读取的每一行数据都加上锁。
在这里插入图片描述
一般隔离级别越高,越安全,但是并发程度越低。

脏读
事务A读取事务B未提交的事务,事务B修改数据后,并没有提交事务,这个时候事务A就能查到修改后的数据.这种事务并发问题就叫脏读。
在这里插入图片描述
不可重复读
事务A多次读取同一份数据,事务B在此过程中对数据修改并提交,导致事务A多次读取同一份数据的结果不一致。下图中事务B执行了update以后通过一个commit提交了修改,然后事务A读取到了其他事务提交的数据导致前后两次读取数据不一致情况,这种事务并发问题就叫不可重复读。update和delete都会造成不可重复读的现象。
在这里插入图片描述
幻读
事务A修改数据的同时,事务在A事务中执行了一个范围查询,这个时候满足条件的数据只有一条,这个时候事务B插入了一条数据,并且提交了.重点:插入了一行数据,在A事务里面再去查询的时候,发现多了一条数据.一个事务前后两次读取数据数据不一致,是由于其他事务插入数据造成的,这种情况就叫做幻读.
在这里插入图片描述
脏读是读取了未提交的数据,不可重复读和幻读都是读取了其他事务提交的数据。不可重复读主要是因为update和delete是数据被修改了。幻读是读了多出来的数据,强调前后插入数据的影响,是因为delete的影响。

死锁
下列图片会发生死锁在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值