博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一文搞定MySQL的事务和隔离级别
阅读量:4696 次
发布时间:2019-06-09

本文共 1339 字,大约阅读时间需要 4 分钟。

 

一、事务简介

事务是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。

一个数据库事务通常包含了一个序列的对数据库的读/写操作。它的存在包含有以下两个目的:

  1. 为数据库操作序列提供了一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方法。
  2. 当多个应用程序在并发访问数据库时,可以在这些应用程序之间提供一个隔离方法,以防止彼此的操作互相干扰。

当事务被提交给了DBMS(数据库管理系统),则DBMS需要确保该事务中的所有操作都成功完成且其结果被永久保存在数据库中,如果事务中有的操作没有成功完成,则事务中的所有操作都需要被回滚,回到事务执行前的状态;同时,该事务对数据库或者其他事务的执行无影响,所有的事务都好像在独立的运行。

二、事务的四大特性

  1. 原子性(Atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。
  2. 一致性(Consistency):事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束。
  3. 隔离性(Isolation):多个事务并发执行时,一个事务的执行不应影响其他事务的执行。
  4. 持久性(Durability):已被提交的事务对数据库的修改应该永久保存在数据库中。

三、为什么需要隔离性?

如果事务之间不是互相隔离的,可能将会出现以下问题:

  1. 脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据

  2. 不可重复读:事务A多次读取同一数据,事务B在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果不一致。

  3. 幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。

小结:不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表

四:事务隔离级别

SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的。低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销。

4类隔离级别如下:

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

mysql默认的事务隔离级别为repeatable-read。

推荐阅读

 

限时领取免费Java相关资料,涵盖了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo/Kafka、Hadoop、Hbase、Flink等高并发分布式、大数据、机器学习等技术。

资料传送门:

 

关注下方公众号即可免费领取:

Java碎碎念公众号

 

转载于:https://www.cnblogs.com/haha12/p/10516797.html

你可能感兴趣的文章
windows cmd 查看文件目录树
查看>>
Python: PS 图层混合算法汇总
查看>>
C Tricks(十九)—— 求以任意数为底的对数
查看>>
Hbase PleaseHoldException错误
查看>>
利用Handler在子线程中更新UI
查看>>
linux用户管理和文件权限
查看>>
Activiti 流程实例、任务、执行对象及相关的表
查看>>
wpa wp2 psk的配置方式
查看>>
yii性能调节
查看>>
centos 7.4 + postgresql 10.1 + pg_amqp
查看>>
Throwable、Error、Exception、RuntimeException 区别
查看>>
js对闭包的理解
查看>>
腾讯面试问题
查看>>
自定义标题栏右键菜单
查看>>
Bootstrap概述
查看>>
elementUi源码解析(1)--项目结构篇
查看>>
C#中用DateTime的ParseExact方法解析日期时间(excel中使用系统默认的日期格式)
查看>>
任务二 阅读报告
查看>>
高阶函数
查看>>
W3100SM-S 短信猫代码发送 上
查看>>