解决数据库高并发数据脏读问题-全面理解数据库事务ACID特点

本文介绍了数据库事务的ACID特性,包括原子性、一致性、隔离性和持久性,并通过实例详细解释了不同隔离级别的概念,如读未提交、读已提交、可重复读和串行化,帮助理解如何避免并发操作中的数据脏读问题。
什么是事务

  MySQL事务只要勇于处理操作量大,复杂度高的数据。 比如:在管理系统中删除一个人员的基本资料,也要删除人员的相关信息,文件,邮箱等等,这些数据库的操作语句就构成了一个事务。一个事务是一个只包含所有读/写操作成功的集合。叫做事务
在这里插入图片描述
一个事务的本质上有四个特点:ACID,当然ACID为简称如下:

  • A:Atomicity原子性
  • C:Consistency一致性
  • I : Isolation隔离性
  • D:Durability耐久性
原子性(Atomicity):

  原子性任务是一个独立的操作单元,是一种要么全部都是,要么全部都不是的院子单位性操作,啥意思? 就是 事务要么发生,要么就不发生。

有两个用户:zhangsan和lisi,在zhangsan账户中有1000元的人民币,lisi账户中有200元的人民币,当zhangsan用户给lisi用户转账100元人名币,相当于 zhangsan 1000-100=900 lisi 200+100=300, 原子性表示,要么这两个步骤同时成功,zhangsan转账lisi zhangsan减钱,lisi增钱,要么一起失败。 不然只发生其中一个动作。

一致性(Consistency):

在事务开始之前和事务结束之后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,在zhangsan账户中有1000元的人民币 ,lisi账户中有200元的人民币 当zhangsan用户给lisi用户转账100元人名币,相当于 zhangsan 1000-100=900 lisi 200+100=300,转账成功,一致性表示事务完成后,符合逻辑运算,肯定不能zhangsan向lisi转钱了,zhangsan减钱,lisi没增钱…

隔离性(Isolation):

数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时,由于交叉执行而导致数据的不一致。 事务隔离分为不同的级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。针对多个用户同时操作,主要是排除其他事务对本次事务的影响。
在这里插入图片描述

事务隔离级别 脏读 不可重复读 幻读
读未提交(read-uncommitted)
不可重复读(read-committed)
可重复读(repeatable-read)
串行化(serializable)

在mysql中默认的事务级别为repeatable-read(可重复读)
在这里插入图片描述

读未提交(read-uncommitted):

打开一个客户端将mysql默认REPEATABLE-READ改为:read-uncommitted

select @@tx_isolation; 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

延瓒@yankerp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值