本文主要是介绍解决数据库高并发数据脏读问题-全面理解数据库事务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; # 查看当前的事务级别
set session transaction isolation level read uncommitted; # 设置事
这篇关于解决数据库高并发数据脏读问题-全面理解数据库事务ACID特点的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!