MySQL进阶:MySQL事务、并发事务问题及隔离级别

👨‍🎓作者简介:一位大四、研0学生,正在努力准备大四暑假的实习、
🌌上期文章:MySQL进阶:视图&&存储过程&&存储函数&&触发器
📚订阅专栏:MySQL进阶
希望文章对你们有所帮助

这一部分内容还是很重要的,虽然学起来感觉不是很难,但是要多体会一下,体会好这里的精髓才能更好的理解MySQL事务的锁。

MySQL事务及隔离级别

  • 简介
  • 事务操作
    • 未控制事务
    • 控制事务一
    • 控制事务二
  • 事务四大特性(高频面试题)
  • 事务并发问题(重点)
  • 事务隔离级别

简介

事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。
就比如转账,包括加钱和减钱的操作,这一组操作必须在一个事务的范围内,要么都成功,要么都失败。

默认MySQL的事务是自动提交的,也就是说,当执行完一条DML语句时,MySQL会立即隐
式的提交事务。

事务操作

create table account(id int primary key AUTO_INCREMENT comment 'ID',name varchar(10) comment '姓名',money double(10,2) comment '余额'
) comment '账户表';
insert into account(name, money) VALUES ('张三',2000), ('李四',2000);

未控制事务

-- 1. 查询张三余额
select * from account where name = '张三';
-- 2. 张三的余额减少1000
update account set money = money - 1000 where name = '张三';
出错了....
-- 3. 李四的余额增加1000
update account set money = money + 1000 where name = '李四';

"出错了…"这句话会报错,若不加事务,就会导致张三的钱减少,但是李四的钱没有增加,这就违背了数据一致性

控制事务一

1、查看/设置事务提交方式

SELECT @@autocommit ;
SET @@autocommit = 0 ;

2、提交事务

COMMIT;

3、回滚事务

ROLLBACK;

上述的这种方式,是修改了事务的自动提交行为, 把默认的自动提交修改为了手动提交, 此时我们执行的DML语句都不会提交, 需要手动的执行commit进行提交。

控制事务二

1、开启事务

BEGIN;START TRANSACTION;

2、提交事务

COMMIT;

3、回滚事务

ROLLBACK;

事务四大特性(高频面试题)

  • 原子性:事务是不可分割的最小单元,要么全成功要么全失败
  • 一致性:事务完场时,必须使所有数据保持一致状态
  • 隔离性:数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行
  • 持久性:事务一旦提交或回滚,对数据库中的数据的改变是永久的

事务的四大特性,简称ACID。

事务并发问题(重点)

1、脏读:一个事务读到另外一个事务还没有提交的数据。
在这里插入图片描述
B事务的select操作读取到了DB中id=1的数据,但读出来的是事务A执行update后的数据,但事务A根本还没有提交事务。

2、不可重复读:一个事务先后读取同一条记录,但两次读取的数据不同,称之为不可重复读。
在这里插入图片描述
注意:假设此时已经解决了事务的脏读问题
事务A两次读取同一条记录,但是读取到的数据却是不一样的。这是因为在两次select操作之间有一个事务B提交了,事务就是将这一行的数据修改了。

3、幻读:一个事务按照条件查询数据时,没有对应数据行,但是在插入数据时,又发现这行数据已经存在,好像出现了“幻影”。
在这里插入图片描述
注意:假设此时已经解决了事务的脏读问题和不可重复读问题

1、事务A执行select,确认了数据库没有id=1的数据
2、事务B执行insert,数据库中增加了id=1的数据
3、事务A执行insert,由于id=1的数据已经存在,无法插入
4、事务A再次执行select,由于已经解决了不可重复读的问题,此时事务A还是没办法获取到id=1的数据

这就是幻读,明明查不到,却插入不进去。

事务隔离级别

为了解决并发事务问题,数据库中引入了事务的隔离级别:

隔离级别脏读不可重复读幻读
Read uncommitted
Read commited×
Repeatable Read(默认)××
Serializable×××

1、查看事务的隔离级别:

SELECT @@TRANSACTION_ISOLATION;

2、设置事务隔离级别:

SET [ SESSION | GLOBAL ] TRANSACTION ISOLATION LEVEL { READ UNCOMMITTED | 
READ COMMITTED | REPEATABLE READ | SERIALIZABLE }

需要注意的是,事务的隔离级别越高,数据自然越安全,但是性能会更低。

在这里我们可以看到,MySQL默认的事务隔离级别是RR,脏读和不可重复读的问题是已经解决了,但幻读问题的解决方法是要加一个行级锁——间隙锁&临键锁。

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

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

相关文章

Docker Machine windows系统下 安装

如果你是 Windows 平台,可以使用 Git BASH,并输入以下命令: basehttps://github.com/docker/machine/releases/download/v0.16.0 &&mkdir -p "$HOME/bin" &&curl -L $base/docker-machine-Windows-x86_64.exe >…

点燃技能火花:探索PyTorch学习网站,开启AI编程之旅!

介绍:PyTorch是一个开源的Python机器学习库,它基于Torch,专为深度学习和科学计算而设计,特别适合于自然语言处理等应用程序。以下是对PyTorch的详细介绍: 历史背景:PyTorch起源于Torch,一个用于…

【真机Bug】异步加载资源未完成访问单例导致资源创建失败

1.错误表现描述 抽卡时,10抽展示界面为A。抽取内容可能是整卡或者碎片,抽到整卡,会有立绘展示和点击详情的按钮。点击详情后出现详情页B。【此时界面A预制体被销毁,卡片数据进入数据缓存池】点击页面B的返回按钮,单例…

C++——模版

前言:哈喽小伙伴们好久不见,这是2024年的第一篇博文,我们将继续C的学习,今天这篇文章,我们来习一下——模版。 目录 一.什么是模版 二.模版分类 1.函数模版 2.类模板 总结 一.什么是模版 说起模版,我们…

高性能通信之Netty

一, 同步IO(BIO)模型的架构 一般针对性能不高的情况下可以使用. 二,异步IO(NIO)模型的架构 多路复用(epoll模型):

【LeetCode:124. 二叉树中的最大路径和 + 二叉树+递归】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

【力扣hot100】刷题笔记Day19

前言 回溯回溯回溯!早上整理档案竟然用了桶排序,不愧是算法狂魔们 79. 单词搜索 - 力扣(LeetCode) DFS class Solution:def exist(self, board: List[List[str]], word: str) -> bool:m, n len(board), len(board[0])# used…

谈谈高并发系统的设计方法论

谈谈高并发系统的设计方法论 何为高并发系统?什么是并发(Conurrent)?什么是高并发(Hight Concurrnet)?高并发的衡量指标有哪些? 实现高并发系统的两大板块高并发系统应用程序侧的设计…

腾讯云学生服务器使用教程_申请腾讯云学生机详细流程

2024年腾讯云学生服务器优惠活动「云校园」,学生服务器优惠价格:轻量应用服务器2核2G学生价30元3个月、58元6个月、112元一年,轻量应用服务器4核8G配置191.1元3个月、352.8元6个月、646.8元一年,CVM云服务器2核4G配置842.4元一年&…

还在用Jenkins?快来试试这款简而轻的自动部署软件!

最近发现了一个比 Jenkins 使用更简单的项目构建和部署工具,完全可以满足个人以及一些小企业的需求,分享一下。 Jpom 是一款 Java 开发的简单轻量的低侵入式在线构建、自动部署、日常运维、项目监控软件。 日常开发中,Jpom 可以解决下面这些…

吴恩达机器学习全课程笔记第五篇

目录 前言 P80-P85 添加数据 迁移学习 机器学习项目的完整周期 公平、偏见与伦理 P86-P95 倾斜数据集的误差指标 决策树模型 测量纯度 选择拆分方式增益 使用分类特征的一种独热编码 连续的有价值特征 回归树 前言 这是吴恩达机器学习笔记的第五篇&#xff0c…

《2023跨境电商投诉大数据报告》发布|亚马逊 天猫国际 考拉海购 敦煌网 阿里巴巴

2023年,跨境电商API接口天猫国际、京东国际和抖音全球购以其强大的品牌影响力和市场占有率,稳坐行业前三的位置。同时,各大跨境电商平台消费纠纷问题层出不穷。依据国内知名网络消费纠纷调解平台“电诉宝”(315.100EC.CN&#xff…

javaEE--后端环境变量配置

目录 pre 文件准备 最终运行成功结果 后端运行步骤 1.修改setenv文件 2.运行setenv,设置环境变量 3.查看jdk版本 4.修改mysql文件夹下的my文件 前端运行步骤 1.nodejs环境配置 2.查看node和npm版本 3.下载并运行npm 4.注册登录 pre 文件准备 最终运行…

VR转接器:破解虚拟与现实边界的革命性设备

VR转接器,这一革命性的设备,为虚拟现实体验带来了前所未有的自由度。它巧妙地连接了虚拟与现实,使得用户在享受VR眼镜带来的奇幻世界的同时,也能自由地在现实世界中活动。这一设计的诞生,不仅解决了VR眼镜续航的瓶颈问…

GO结构体

1. 结构体 Go语言可以通过自定义的方式形成新的类型,结构体就是这些类型中的一种复合类型,结构体是由零个或多个任意类型的值聚合成的实体,每个值都可以称为结构体的成员。 结构体成员也可以称为“字段”,这些字段有以下特性&am…

STM32 | 零基础 STM32 第一天

零基础 STM32 第一天 一、认知STM32 1、STM32概念 STM32:意法半导体基于ARM公司的Cortex-M内核开发的32位的高性能、低功耗单片机。 ST:意法半导体 M:基于ARM公司的Cortex-M内核的高性能、低功耗单片机 32:32位单片机 2、STM32开发的产品 STM32开发的产品&a…

【论文笔记】Improving Language Understanding by Generative Pre-Training

Improving Language Understanding by Generative Pre-Training 文章目录 Improving Language Understanding by Generative Pre-TrainingAbstract1 Introduction2 Related WorkSemi-supervised learning for NLPUnsupervised pre-trainingAuxiliary training objectives 3 Fra…

Java 网络面试题解析

1. Http 协议的状态码有哪些?含义是什么?【重点】 200:OK,客户端请求成功。 301:Moved Permanently(永久移除),请求的URL已移走。Response中应该包含一个Location URL,…

steam++加速问题:出现显示443端口被 vmware-hostd(9860)占用的错误。

目录 前言: 正文: 前言: 使用Steam对GitHub进行加速处理时,建议使用2.8.6版本。 下载地址如下:Release 2.8.6 BeyondDimension/SteamTools GitHub 下载时注意自己的系统位数 正文: 使用GitHub时会使…

NOC2023软件创意编程(学而思赛道)python初中组初赛真题

软件创意编程 一、参赛范围 1.参赛组别:小学低年级组(1-3 年级)、小学高年级组(4-6 年级)、初中组。 2.参赛人数:1 人。 3.指导教师:1 人(可空缺)。 4.每人限参加 1 个赛项。 组别确定:以地方教育行政主管部门(教委、教育厅、教育局) 认定的选手所属学段为准。 二、…