mysql事务

目录

一、什么是事务

二、事务的四大特点

1.原子性(A)

2.持久性(I)

3.隔离性(D)

4.一致性(C)

三、怎么使用事务

四、事务的并发问题

1.脏读问题(读未提交)

2.不可重复读(读已提交)

3.幻读

 五、隔离级别

1.读未提交

2.读已提交

3.可重复读

4.串行化

5.隔离级别与一致性的关系


一、什么是事务

事务是一个不可分割的最小工作单元

事务只和数据库的增删改有关,一个完整的事务需要批量的增删改语句

二、事务的四大特点

1.原子性(A)

原子性是指事务是一个不可被分割的工作单元,其中的操作要么同时成功,要么同时失败

2.持久性(I)

持久性是指事务一旦提交以后,那么他对数据库的更改就是永久性的,接下来的其他操作或故障都不会改变提交的数据(永久性是指数据写回到磁盘中)

3.隔离性(D)

事务和事务之间是相互隔离的(自己做自己的事情,但是它是很难实现的)

4.一致性(C)

指事务的执行结果必须是数据库从一个状态转换为另一个状态

比如:张三和李四各有500(原来状态);张三给李四转了100,现在张三400,李四600(现在状态)

三、怎么使用事务

分三个阶段:1.开启事务 2.增删改执行语句 3.提交事务

例:

一张表:

1.事务提交-----张三(id=1)给李四(id=2)转100

先把钱改回去,都是500

start transaction;//开启事务 
update act set balance=400 where id=1; 
update act set balance=600 where id=2; 
commit;//提交事务

2.事务提交 (中间出错了)-----张三(id=1)给李四(id=2)转100

先把钱改回去,都是500

start transaction;
update act set balance=400 where id=1;
sssss
update act set balance=600 where id=2;
rollback; #如果出现了错误,那么马上回滚为原来的状态
commit; #如果没有错误,则事务提交

中间出错了,所以事务回滚,还是500和500 

四、事务的并发问题

1.脏读问题(读未提交)

一个事务读取到了另一个事务修改但未提交的数据

出现脏读说明事物的隔离级别很弱

例:

两个事务A,B

可以看出:事务B读取到了事务A修改但是没有提交的数据(万一事务A回滚了怎么办)

这就是脏数据

2.不可重复读(读已提交)

在同一个事务内多次读取同一个数据,数据前后不一致

例:

对A来说前后不一致

3.幻读

 五、隔离级别

1.读未提交

设置读未提交的隔离级别:

set global transaction isolation level read uncommitted;

两个事务:

开启事务A和B: 

事务B读取用户信息:

 事务A将用户名改为了aaa:

 事务B读取用户信息:

可以看到事务B读取了事务A修改但未提交的数据,是最低的隔离级别

2.读已提交

设置读已提交的隔离级别

set global transaction isolation level read committed;

 两个事务:

开启两个事务:

事务A查询用户信息: 

事务B修改用户信息,然后提交事务

然后事务A再查询:

可以看出,单从事务A来说,两次查询的数据是不一样的,事务A读取到了事务B已经提交的数据,解决了脏读问题

3.可重复读

设置可重复读的隔离级别(mysql默认的隔离级别),脏读问题在可重复读的事务隔离级别中不存在的

set global transaction isolation level repeatable read;

两个事务AB:

开启事务AB:

 事务A查询用户信息:

事务B添加一条数据,然后事务A和事务B再查询:

然后事务B提交,事务A和事务B再查询:

事务B再添加一条数据,事务A和事务B再查询:

 可以看出,事务B添加是成功的,但是事务A还是原来的数据,这就是可重复读,读取的是备份数据而不是真正的数据

4.串行化

串行化指的是事务A在执行期间,其他事务一律等待

设置串行化的隔离级别

set global transaction isolation level serializable;

两个事务AB:

开启事务AB:

现在事务A先做一个修改,然后事务B做,会发现运行一直不出结果,然后事务A提交之后,事务B才会运行:

串行化

5.隔离级别与一致性的关系

读未提交哪个问题都没解决;读已提交解决了脏读;可重复读都解决了(但是幻读只有采用InnoDB引擎才是解决了)

并发问题

---------------------

隔离级别

脏读

不可重复读

幻读

读未提交

×

×

×

读已提交

×

×

可重复读

√(InnoDB)

串行化

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

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

相关文章

信息学科平台系统构建:Spring Boot框架深度解析

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式,是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示: 图4-1系统工作原理…

Android中SurfaceView与GLSurfaceView 的关系

SurfaceView 与 GLSurfaceView 的关系 在 Android 开发中,SurfaceView 和 GLSurfaceView 是实现自定义渲染效果的关键组件。它们提供了不同的渲染方式,适用于不同的应用场景。我们将通过以下几个方面详细说明 SurfaceView 和 GLSurfaceView 的特点及实现…

【LeetCode:3226. 使两个整数相等的位更改次数 + 模拟 + 位运算】

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

卷积神经网络实验三:模型优化(1)

作者有话说: 这篇文章写的还是比混乱的。因为本人也是第一次做这样的尝试,虽然接触深度学习有一年了,但是对于模型的优化仅仅是局限于理论上。通过这一次的实验,我对于模型的理解也更深了几分。我不期望这篇文章能帮你能解决多大问…

虚拟内存与物理内存之间的映射关系

当我有a.out 和 b.out 这两个程序 不占用内存,当 变成./a.out ./b.out就会生成0-4g 的进程控制块 占用内存 0-3g用户区 3g-4g内核区 pcb进程控制块本质:struct结构体(有成员变量)位于内核空间 比如int a10 放在虚拟地址上 肯定不行…

基于树莓派的安保巡逻机器人--(一、快速人脸录入与精准人脸识别)

目录 零、前言 一、人脸检测 二、人脸识别 1、采集人脸 2、训练人脸识别模型 3、人脸识别应用 零、前言 随着智能安防需求的增长,基于人工智能和物联网的安保系统逐渐成为趋势。树莓派因其低成本、高扩展性等特点,成为很多AI项目的理想平台。本文将为大…

如何在Python爬虫等程序中设置和调用http代理

在Python爬虫中为了更好地绕过反爬机制,获取网页信息,有时可能需要在Python中应用代理服务,这样做的目的就是防止自己的ip被服务器封禁,造成程序运行时中断连接,那么如何在python中设置代理呢? 我们通过几个…

ElasticSearch安装

1.Docker安装 docker run -d --name es7 --restartalways -e ES_JAVA_POTS"-Xms256m -Xmx256m" -e "discovery.typesingle-node" -v /opt/es7/data/:/usr/share/elasticsearch/data -p 9200:9200 -p 9300:9300 registry.cn-beijing.aliyuncs.com/all100…

使用 Cursor 和 Devbox 快速开发并上线 Gin 项目

作为开发者,最让我们头疼的事情是什么?那必须是环境配置、版本控制以及各种部署配置等等繁琐的工作。 想象一下,如果你只需点击几下鼠标,就能拥有一个完全配置好的开发环境,支持从 Java 到 Python,从 Reac…

PHP轻松阅读图书借阅系统小程序源码

📚【学霸秘籍】图书借阅系统,让阅读触手可及!🚀✨ 📖 开篇:告别纸质登记,拥抱智能借阅新时代 你是否还记得,曾经为了借阅一本书,需要在图书馆的登记簿上手动填写复杂的…

js 获取当前时间与前一个月时间

// 获取当前时间的毫秒数 var currentTimeMillis new Date().getTime();// 获取前一个月的Date对象 var dateLastMonth new Date(); dateLastMonth.setMonth(dateLastMonth.getMonth() - 1);// 获取前一个月的毫秒数 var timeMillisLastMonth dateLastMonth.getTime();conso…

sudo apt install jupyter-notebook安装notebook失败E: Aborting install.

问题: sudo apt install jupyter-notebook安装notebook失败E: Aborting install. ~/jie/mywork/PointNetCFD$ sudo apt install jupyter-notebook --fix-missing Reading package lists... Done Building dependency tree Reading state information... Do…

查缺补漏----文件硬连接与软链接(符号链接)

首先回顾一下文件打开的过程: FCB用来存放控制文件需要的各种信息的数据结构,FCB 的有序集合称为文件目录,一个FCB 就是一个文件目录项。 典型的FCB,即一个文件目录项如下: 而UNIX中的目录项如下,每个目录…

为什么选择AWS

在选择云服务提供商时,国内企业面临了不少选择,但亚马逊AWS仍然在许多人心中占据了一席之地。那为什么会选择AWS呢?今天九河云就来带大家一起来探讨一下背后的原因。 1. 全球化的布局与服务优势 AWS的全球化布局和服务网络可以说是它的最大…

到底是谁在初始化内存?—揭开处理器启动过程的奥秘

引言 在嵌入式系统和处理器架构的世界中,内存初始化过程就像一场舞台上的神秘表演。我们知道处理器依赖内存运行应用程序,但它最初如何实现内存的自我启动?在设备开机的那一刻,处理器如何有序地将启动加载程序(Bootlo…

【制造业&PPE】安全帽等施工现场安全防护装备识别图像分割系统源码&数据集全套:改进yolo11-DRBNCSPELAN

改进yolo11-DBBNCSPELAN等200全套创新点大全:安全帽等施工现场安全防护装备识别图像分割系统源码&数据集全套 1.图片效果展示 项目来源 人工智能促进会 2024.10.24 注意:由于项目一直在更新迭代,上面“1.图片效果展示”和“2.视…

android——渐变色

1、xml的方式实现渐变色 效果图&#xff1a; xml的代码&#xff1a; <?xml version"1.0" encoding"utf-8"?> <shape xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools…

CPU算法分析LiteAIServer视频智能分析平台噪声检测功能在视频监控中的应用与优势

在视频监控系统中&#xff0c;噪声问题一直是影响视频画面清晰度和可用性的关键因素。这些噪声可能源于多种因素&#xff0c;如低光环境、摄像机传感器的高灵敏度或编码压缩过程中的失真等。为了应对这些挑战&#xff0c;CPU算法分析LiteAIServer引入了噪声检测功能&#xff0c…

WPF使用prism框架发布订阅实现消息提示

我们在使用wpf中自带的消息提示弹出框MessageBox.Show()十分笨拙&#xff0c;那么怎么去使用prism框架的发布订阅去实现消息提示呢&#xff1f; 1.创建一个类&#xff0c;继承接口PubSubEvent /// <summary> /// 发布订阅消息事件 /// </summary> public class M…

贪心算法习题其二【力扣】【算法学习day.19】

前言 ###我做这类文档一个重要的目的还是给正在学习的大家提供方向&#xff08;例如想要掌握基础用法&#xff0c;该刷哪些题&#xff1f;&#xff09;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关键点&#xff0c;力扣上的大佬们的题解质量是非常非常高滴&am…