mysql查看版本号_十分钟了解MySQL事务机制

读书百遍其义自现。

74371771c85b59c6c3730afae4c4ea8f.png

MySQL数据库在我们平时工作学习中的使用频率是相当之高,彻底掌握MySQL的事务机制对我们平时工作会有非常大的帮助,仔细回忆一下,你是否对MySQL事务相关的知识是否完全掌握?是否感觉有的地方有些模糊?通过这篇文章让你彻底理顺逻辑,下面就开始吧!

01事务的特性

事务的特点

提到数据库的事务,我们肯定脱口而出的就是ACID,但是有的时候并不清楚ACID到底是什么,掌握事务的特性对于我们接下来学习是相当重要的。

首先举个例子,老王去银行转账的例子将农业银行的100元转到老刘农业银行卡,主要有以下三步

1.首先判断老王的农业银行的账户金额是否大于100元

2.老王的农业银行的账户余额减去100元

3.老刘的农业银行的账户余额加100元

试想一下如果其中某一步失败就会导致非常严重的问题,我们需要把操作放到一个事务中去执行,如果其中有一步执行失败,那么所有操作都将回滚,通过这种方式来保证数据一致性。

 start transaction;select balance from account where uid = 60610;update account set balance = balance - 100 where uid = 60610;update account set balance = balance + 100 where uid = 60611;commit;

原子性(atomicity)

原子在化学中表示不可再进行分割的基本微粒,在事务表示的是这是一个不能再被分割的最小工作单元,整个事务的所有操作,要么全部成功,要么全部失败回滚,而不可能仅仅执行某一部分。

一致性(consistency)

数据库总是从一个一致性的状态转化到另一个一致性的状态,老王转账即使第二步和第三步之间系统崩溃了,也不会出现问题,因为数据并没有提交,没有提交事务,所做的修改也并不会保存到数据库中。

隔离性(isolation)

通常来说,一个事务所做的修改在最终提交前,对其他的事务是不可见的,这里为什么说“通常是不可见的”,因为这和具体的事务隔离级别有关,后面我们会进行分析。

持久性(durability)

一旦事务提交,则其他的修改就会永远保存到数据库中。即使系统崩溃,修改的数据也不会丢失。

02事务隔离级别

事务隔离级别

所谓事务隔离级别,就是用来定义一个事务所做的修改,哪些在事务内和事务间是可见的,哪些是不可见的。较低级别的隔离通常可以执行更高的并发,系统开销也更低 。

在MySQL中一共有四种事务隔离级别:读未提交、读提交、可重复读、可串行化,下面我们将分别简单介绍四种隔离级别。

读未提交 read uncommitted

在此事务隔离级别下,修改数据库中的数据,即使没有提交,对其他事务也是可见的。事务可以读到未被提交的数据,这种情况也被称为脏读,这种隔离级别下会出现很多问题,但性能也不会比read committed好太多。

读提交 read committed

大多的数据库的默认事务隔离都是读提交,但是MySQL的默认事务隔离基本是可重复读,在这种隔离级别下,只有当事务提交后,事务中的修改才会对其他事务可见,但是会出现在同一个事务中多次查询数据结果可能不同,因为中间可能有修改数据的事务提交了,这种现象叫

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值