查缺补漏三:事务隔离级别

news2024/11/16 3:39:12

什么是事务?

事务就是一组操作的集合,事务将整组操作作为一个整体,共同提交或者共同撤销

这些操作只能同时成功或者同时失败,成功即可提交事务,失败就执行事务回滚

MySQL的事务默认是自动提交的,一条语句执行成功,MySQL将会隐式的提交事务

以转账为例,张三向李四转账1000元
这个整体行为包含三个操作:首先查询张三账户的余额,其次将张三账户余额-1000,最后将李四账户余额+1000。事务就是将这三个操作看作最小提交单元,就是一荣俱荣一损俱损。

-- 查看事务管理状态  1-自动  0-手动
select @@autocommit;
-- 设置事务手动管理
set @@autocommit = 0;
-- 开启事务
start transaction;
-- 开启事务:start transaction 或者 begin
select money from account where name = '张三';
update account set money = money - 1000 where name = '张三';
update account set money = money + 1000 where name = '李四';
-- 事务提交
commit;
-- 事务回滚
rollback;

事务四大特性ACID

原子性Atomicity:一组操作为最小执行单元,只能全部执行成功或者全部失败

一致性Consistency:事务完成后,所有数据都要保持一致状态

一致性表示事务完成后,数据操作前后符合逻辑运算,状态一致

隔离性Isolation:是指在并发操作数据库时,各个事务之间不会相互影响

持久性Durability:事务一旦提交或回滚,对于数据库的修改将会永久保存

并发事务问题

脏读

两个事务A和B在并发下操作数据库中的同一数据时,当事务A对数据进行了修改但是还没有commit的同时,事务B对该数据进行了select,此时事务B读取到的数据就是不准确的。这种情况叫做脏读

事务B读取到了事务A修改但还未提交的数据---->脏读
在这里插入图片描述

不可重复读

同样事务AB并发下操作数据库中同一数据,首先事务A对该数据进行查询,查询之后又进行了其他操作。与此同时,事务B执行了更新操作并且成功commit。那么当事务A再次对数据库查询的时候就会出现与上次读取到的数据不一致的情况
在这里插入图片描述

幻读

事务AB并发下操作数据库中同一数据,事务A首先查询了数据库中是否有id=1的数据,没有就插入。那么此时事务A未查询到该数据存在,同时事务B执行了插入操作插入了id=1的数据并且提交。那么事务A再去插入的时候则会报主键冲突的错误,但是当事务A再一次去查的时候发现id=1的数据仍然是不存在( 前提是已经解决了不可重复读的问题,一个事务多次访问同一数据的结果是一致的 ),这种情况就称之为幻读

在这里插入图片描述

事务隔离级别

隔离级别

隔离级别脏读不可重复读幻读
Read uncommitted(读未提交)×××
Read committed(oracle默认)(读已提交)××
Repeatable Read(mysql默认)(可重复读)×
Serializable(可序化)

× --> 无法解决 √ --> 可以解决

在sql中查看当前事务隔离级别

select @@transaction_isolation;

设置当前事务隔离级别

-- 设置事务隔离级别
set [session|global] transaction isolation level {Read uncommitted | Read committed | Repeatable Read |Serializable};

session是指尽在当前会话中使用该事务隔离级别,global表示全局有效

四种事务隔离级别当中,Serializable可序化级别最高。要求序列化执行sql指令,事务只能一个接一个的执行,不允许并发执行。性能低下

而Read Uncommitted读未提交性能最好,但是存在脏读问题等

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【LeetCode第 332 场周赛】

传送门 文章目录6354. 找出数组的串联值6355. 统计公平数对的数目6356. 子字符串异或查询6357. 最少得分子序列6354. 找出数组的串联值 题目 思路 前后指针 代码 class Solution { public:long long findTheArrayConcVal(vector<int>& nums) {long long res 0;i…

多线程相关面试题

讲解下你自己理解的 CAS 机制 ? 全称 Compare and swap, 即 “比较并交换”. 相当于通过一个原子的操作, 同时完成 “读取内存, 比较是否相等, 修改内存” 这三个步骤. 本质上需要 CPU 指令的支撑. ABA问题怎么解决&#xff1f; 给要修改的数据引入版本号. 在 CAS 比较数据…

微搭低代码从入门到精通06-代码编辑器

有初学的同学一直有个疑问&#xff0c;什么叫低代码。低代码的特点是提供了大量的前端组件&#xff0c;我们在开发小程序的时候可以直接拖拽就完成了界面的开发。 但是一款APP的开发只有界面是不够的&#xff0c;还需要有交互逻辑&#xff0c;比如我们在会员小程序里充值的时候…

Linux服务器部署xxl-job

Linux服务器部署xxl-job Linux服务器部署xxl-jobLinux服务器部署xxl-jobxxl-job文档文档中要求的环境Maven下载&#xff1a;JDK下载&#xff1a;MySQL下载&#xff1a;部署MySQL上传MySQL安装包到服务器解压&#xff0c;安装配置文件启动MySQL查看初始密码使用初始密码登录MySQ…

分享一个可用的ChatGPT网页及备选方案

本文本来是在咱公众号分享&#xff0c;被一些跳蚤、苍蝇、蚊子和老鼠给搞臭了&#xff0c;故在此重新分享&#xff0c;欢迎那些跳蚤、苍蝇、蚊子和老鼠继续来战&#xff01; 近来ChatGPT可谓是火得不可开交&#xff01;各路牛鬼蛇神不管懂与不懂都借这阵ChatGPT风勇占流量高地…

c++11 标准模板(STL)(std::multimap)(四)

定义于头文件 <map> template< class Key, class T, class Compare std::less<Key>, class Allocator std::allocator<std::pair<const Key, T> > > class multimap;(1)namespace pmr { template <class Key, class T…

【JVM】7种经典的垃圾收集器

文章目录1. 垃圾收集器概述2. Serial 收集器3. ParNew 收集器4. Paraller Scavenge 收集器5. Serial Old收集器6. Parller Old收集器7. CMS 收集器8. Garbage First 收集器本文参考&#xff1a;深入理解Java虚拟机&#xff1a;JVM高级特性与最佳实践&#xff08;第3版&#xff…

Ubuntu安装配置Cuda和Pytorch gpu

前言 在Ubuntu中操作系统中,通过Anconda安装对应的虚拟环境以及软件包,一般都需要适配Cuda、Pytorch版本等 以下安装配置都是在Ubuntu操作系统下 1. 安装Cuda 通过Ubuntu操作系统查看cuda适配的版本:nvidia-smi 截图如下: 查看Ubuntu版本可如下方式 (1)cat /proc/ver…

QT QOpenGLWidget使用说明(一)OpenGL 类的添加

文章目录一.Qt项目中添加OpenGL库二.添加OpenGL类Qt官网关于 QOpenGLWidget的说明: https://doc.qt.io/qt-6.2/qopenglwidget.html一.Qt项目中添加OpenGL库 cmakeList.txt中添加OpenGL库 find_package(Qt6 COMPONENTS OpenGLWidgets REQUIRED) target_link_libraries(mytarget …

Shader(向量)

单位向量向量加法向量的模向量点乘&#xff08;夹角>0则在前方&#xff0c;反之后方&#xff09;5.向量的投影6.向量的减法7.向量的叉乘&#xff08;可以判断点是否在三角形内&#xff09;满足AB*AP,BC*BP,CA*CP都大于0或者都小于0则P点在三角形内

STM32单片机蓝牙APP可烘干升降晾衣架带照明灯

实践制作DIY- GC0123-蓝牙APP可烘干升降晾衣架 一、功能说明&#xff1a; 基于STM32单片机设计-蓝牙APP可烘干升降晾衣架 功能介绍&#xff1a; 硬件组成&#xff1a; STM32F103C系列最小系统单片机1个uln2003步进电机&#xff08;模拟升降&#xff09;1个uln2003步进电机&a…

刘润:五维思考,让你站得更高、看得更远

原标题&#xff1a;刘润&#xff1a;五维思考&#xff0c;让你站得更高、看得更远 前言&#xff1a;遇到问题时&#xff0c;有的人很快就能想明白&#xff0c;有的人需要很久才能想明白&#xff0c;还有的人始终都想不明白。 而且&#xff0c;那些很快就能想明白的人&#xff0…

大数据之Hadoop

文章目录一、大数据概论1、大数据概念2、大数据的特点3、大数据应用场景4、大数据部门的业务流程分析5、大数据部门组织结构&#xff08;重点&#xff09;二、从Hadoop框架讨论大数据生态1、什么是Hadoop2、Hadoop发展历史3、Hadoop三大发行版本1.Apache Hadoop2.Cloudera Hado…

Rust学习入门--【6】Rust 基础语法

Rust 基础语法 变量&#xff0c;数据类型&#xff0c;注释&#xff0c;函数和控制流&#xff0c;这些是大部分编程语言都具有的编程概念。 本节将学习理解这些概念。 变量 Rust 是强类型语言&#xff0c;但具有自动判断变量类型的能力。这很容易让人与弱类型语言产生混淆。…

Sentinel源码解析-ProcessorSlot具体

前言 上篇文章中我们已经讲到了构造完处理链&#xff0c;然后会调用对应slot的entry方法&#xff0c;我们根据配置文件中Slot的具体顺序来逐一讲解Slot的具体实现。 一、NodeSelectorSlot 这个 slot 主要负责收集资源的路径&#xff0c;并将这些资源的调用路径&#xff0c;以…

ssm学生在线选课成绩教案管理系统java

基于JSP技术、SSM框架、B/S机构、Mysql数据库设计并实现了教案管理系统。系统主要包括个人中心、学生管理、教师管理、公告信息管理、科目管理、课程信息管理、选课记录管理、学生成绩管理、系统管理等功能模块。结合实际项日的功能需求&#xff0c;从研究背景、国内发展的现状…

C++ 基础

命名空间 在 C/C 中&#xff0c;变量、函数和类都是大量存在的&#xff0c;这些变量、函数和类的名称将都存在全局作用域中&#xff0c;可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化&#xff0c;以避免命名冲突或名字污染&#xff0c;namespace 关键字的…

就现在!为元宇宙和Web3对互联网的改造做准备!

欢迎来到Hubbleverse &#x1f30d; 关注我们 关注宇宙新鲜事 &#x1f4cc; 预计阅读时长&#xff1a;8分钟 本文仅代表作者个人观点&#xff0c;不代表平台意见&#xff0c;不构成投资建议。 如今&#xff0c;互联网是各种不同的网站、应用程序和平台的集合。由于彼此分离…

微信小程序Springboot 校园拼车自助服务系统java

系统管理员&#xff1a; 管理员账户管理&#xff1a;在线对管理员的账户信息进行管理&#xff0c;包括对管理员信息的增加修改以及密码的修改等。 站内新闻管理&#xff1a;在后台对站内新闻信息进行发布&#xff0c;并能够对站内新闻信息进行删除修改等。 论坛版块管理&#x…

SpringMVC--注解配置SpringMVC、SpringMVC执行流程

注解配置SpringMVC 使用配置类和注解代替web.xml和SpringMVC配置文件的功能 创建初始化类&#xff0c;代替web.xml 在Servlet3.0环境中&#xff0c;容器会在类路径中查找实现javax.servlet.ServletContainerInitializer接口的类&#xff0c; 如果找到的话就用它来配置Servle…