首页 > 编程知识 正文

深度剖析mysql 事务隔离,深入理解mysql锁事务与并发控制

时间:2023-05-04 18:25:08 阅读:251875 作者:1097

游戏服务器的防御级别应该从数据库中体现,那么我们先来了解下什么是事务?MySQL 入门(3):事务隔离,说到事务,一个最典型的例子就是银行转账:假设A和B的余额都是100元,此时A要向B转账50元。那么我们的操作流程是这样的:

•查询A的余额,保存在balance中,并判断balance是否大于50元

•如果是,则balance减去50元,写回数据库,然后给B的余额加上50元,写回数据库

•如果不是,返回余额不足

那么问题来了,在第一步查询之后,如果我们马上再进行一次转账,而此时A的余额还是原来的100元,大于50,系统判断余额是充足的,转账成功。但是在写回数据库的时候,A的余额还是50元,而B的余额变成了200元。

相信你也看出来了,问题的核心在于这个流程被人“横插了一脚”,没有安安静静不被打扰的执行完这个转账的流程。

正因为我们希望我们的业务逻辑可以不被打扰,所以我们有了“事务”。

那么,事务需要什么样的条件呢?

相信你也或多或少的听过了ACID这一说法。

1.原子性(Atomicity):在通常的语义下,原子性指的是一条语句不可分割。但是在事务中,指的是组成这条事务的所有语句必须要执行完,或者回滚。

2.一致性(Consistency):这里的一致性和我们说的数据一致性,也有些不太一样。我们说的数据一致性,一般指的是MySQL和Redis中的数据是一致的,又或者是MySQL主库和从库中的数据是一致的。但是在这儿通常指的是事务是否产生了非预期的中间状态或结果。比如上面银行转账的例子,转账之前两个人的余额总数是200元,而转账完变成了250元。这就是不符合一致性的。

3.隔离性(Isolation):怕黑的橘子,隔离性指的是事务之间应该是互不影响的。在MySQL里面,事务的隔离被分成了四个级别,我们在后面会详细介绍。

4.持久性(Duration):这个很容易理解,如果一个事务提交了,数据必须得被保存,而不能丢失。关于游戏服务器的防御级别,联系在线业务或者看看看对应的游戏服务器栏目中有简介。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。