MySQL的事务-隔离级别

上篇,整理了MySQL事务的原子性,这篇继续整理MySQL事务的一致性、隔离性和持久性。

2. 一致性指的是事务开始前和结束后,数据库的完整性约束没有被破坏,这保证了数据的完整性和一致性。一致性必须确保数据库从一个一致的状态转换到另一个一致的状态。

3. 隔离性指的是在同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。这保证了并发事务间的互斥性,使得数据在处理过程中不会被其他事务干扰。MySQL支持不同的事务隔离级别:Read Uncommitted, Read Committed, Repeatable Read, Serializable, 这些隔离级别定义了事务如何与其他并发事务交互。较低的隔离级别可以提供更高的并发性能,但可能导致数据不一致问题,如脏读、不可重复读和幻读。而较高的隔离级别可以确保数据的一致性,但可能会限制并发事务的数量。 MySQL的默认隔离级别是 Repeatable Read,这意味着在一个事务内多次读取同一个数据,数据内容时一致的,即使其他事务修改了该数据,也不会影响当前事务的读取结果。

查看mysql的事务隔离级别:

SHOW VARIABLES LIKE 'transaction_isolation';

隔离性体现如下:

(1)如果数据库的事务隔离级别是Read Uncommitted:

由于mysql的默认事务隔离级别是Repeatable Read,先将mysql的默认事务隔离级别改为Read Uncommited

SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

上面的sql只是修改了当前会话的隔离级别,不影响其他会话,修改MySQL的全局默认事务隔离级别如下

SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

修改之后,数据库的默认隔离级别变为READ-UNCOMMITTED

打开两个事务,其中一个事务A读取,一个事务B进行修改数据但不提交,

事务B进行修改数据,但不提交

事务A读取到了事务B未提交的数据,这就产生了脏读。

(2)如果数据库的事务隔离级别是Read committed:

修改数据库的默认隔离级别为读已提交Read committed

set global transaction isolation level read committed;

开启事务A和事务B

在事务B中将zhangsan的money修改为3000,不提交事务,在事务B中可以查询到zhangsan的money变成了3000; 但是在事务A中不会查询到未提交的数据,这就可以避免脏读。

但是读已提交会造成不可重复读,如下

(3)如果数据库的事务隔离级别是Repeated read:

修改默认隔离级别

set global transaction isolation level repeatable read;

MySQL的可重复读如何解决幻读,以及快照读、当前读等问题,下一篇继续整理。

4. 持久性指的是事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/299993.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MYSQL】MYSQL 的学习教程(七)之 慢 SQL 优化思

1. 慢 SQL 优化思路 慢查询日志记录慢 SQLexplain 分析 SQL 的执行计划profile 分析执行耗时Optimizer Trace 分析详情确定问题并采用相应的措施 1. 慢查询日志记录慢 SQL 如何定位慢SQL呢? 我们可以通过 慢查询日志 来查看慢 SQL。 ①:开启慢查询日志…

Redis缓存穿透、缓存击穿、缓存雪崩介绍

一、Redis的缓存穿透 1.什么是缓存穿透? 缓存穿透是指:客户端请求的数据在缓存中和数据库中都不存在,这时缓存就永远不会生效,这些请求都打到数据库从而导致数据库压力过大。 2.出现缓存穿透的解决方案,以下是常用的两…

力扣经典面试题——搜索旋转排序数组及最小值(二分搜索旋转数组系列一次搞定)

我们先来看看一个常规的二分搜索是如何进行的? 例如要找一个有序数组的某个数 【1,2,4,5,9,11,15,19】 我们要找11,每次我们分割半边判断然后看到底在哪一边。 这里为什么…

TCP 三次握手:四次挥手

TCP 三次握手/四次挥手 TCP 在传输之前会进行三次沟通,一般称为“三次握手”,传完数据断开的时候要进行四次沟通,一般称为“四次挥手”。 数据包说明 源端口号( 16 位):它(连同源主机 IP 地址…

sql_lab之sqli注入中的cookie注入

Cookei注入(gxa的从cookei注入) 1.打开控制台 2.验证id2时的值 document.cookie"id2" 3.判断是上面闭合方式 document.cookie"id2 -- s" 有回显 说明是’单引号闭合 4.用order by 判断字段数 5.用联合查询判断回显点 接下来的…

Flowable-升级为7.0.0.M2-第一节

目录 升级jdk升级springboot到3.1.3升级数据库连接池druid-spring-boot-3-starter到1.2.20升级mybatis-plus到3.5.3.2升级flowable到7.0.0.M2 最近有些读者一直问flowable如何升级到7.0.0.M2,接下来我就一步步的把flowable升级到7.0.0.M2 升级jdk flowable7.x采用的…

框架面试题

文章目录 1. spring中的bean是线程安全的吗2. 事务的实现--AOP3. 项目中用到的AOP4.spring中事务的失效场景5. Bean的生命周期6.spring中的循环引用问题7. springMVC的执行流程8. springboot自动装配原理9. 常见注解10 Mybatis11 Mybatis一二级缓存 1. spring中的bean是线程安全…

docker的一些思考

1.docker是啥? 2.镜像执行流程 3.一些疑惑和解答 1. 2.

【教学类-42-03】20231225 X-Y 之间加法题判断题3.0(确保错误题有绝对错误的答案)

背景需求: 根据需求,0-5以内的判断是21题正确,21题错误,但由于错误答案是随机数抽取,有可能恰好是正确的,所以会出现每套题目的正确数和错误数不一样的情况 优化思路一: 设置如果错误答案与正…

图像九宫格切分1x3、3x3 Python

文章目录 1、需求2、实现2-1 贴图、切分2-2 GUI 3、运行效果4、代码 1、需求 把一个图像切分成 1x3 或者 3x3切分出来的图像比例希望都是 1:1 正方形如果图像尺寸满足 切分条件,自动填充一些“白边”然后继续切分如果填充了白边的话,希望能够调整原图像…

Go 语言实战:掌握正则表达式的应用与技巧

Go 语言实战:掌握正则表达式的应用与技巧 1. 引言2. 正则表达式基础2.1 基本概念2.2 常见元素2.3 基本示例 3. Go语言中的正则表达式库3.1 引入regexp包3.2 编译正则表达式3.3 使用正则表达式3.4 示例代码 4. 常用正则表达式函数及使用示例4.1 MatchString4.2 FindS…

数据库01_增删改查

1、什么是数据?什么是数据库? 数据:描述事物的符号记录称为数据。数据是数据库中存储的基本对象。数据库:存放数据的仓库,数据库中可以保存文本型数据、二进制数据、多媒体数据等数据 2、数据库的发展 第一阶段&…