当前位置: 首页 > news >正文

<MySQL> 什么是数据库事务?事务该如何使用?

目录

一、事务的概念

二、事务的核心特性

三、事务操作中的常见BUG

3.1 脏读

3.2 不可重复读

3.3 幻读

四、隔离级别

五、使用事务


一、事务的概念

        “事务”是指一组操作,在逻辑上是不可分割的,组成这组操作的各个语句,或者全部执行成功,或者全部执行失败。

        不同的环境对“事物”这一概念有不同的称呼,在数据库中,这个概念就被称为“数据库事务”。


二、事务的核心特性

事物具有以下特性:

核心特性说明
原子性通过事物,将多条语句组合在一起,使这些语句在执行的时候不可被分割。
一致性事务中的各个操作语句,或者全部执行成功,或者全部执行失败,保持了执行结果的一致。
持久性事务本身也是由操作语句组成的,每一条执行成功的语句带来的数据修改都是持久化存在的。
隔离性用于解决多事务并发执行时可能出现的BUG,隔离性提高了数据的准确性,但降低了程序的运行速度。

三、事务操作中的常见BUG

3.1 脏读

介绍脏读,就像名字一样,意思是读到的数据是脏的,是被污染的。脏读是由于数据库中的数据没有被正确地更新,导致在事务提交时读取的数据是错误的。
举例事务1持续更新数据A,在事务1未更新完毕时,事务2读取了数据A。此时数据A仍然在被事务1改动,那么事务2读取的数据就是一个错误的数据。
解决方案降低事务的并发,当发生写操作时,其他事务不能读,直到写操作执行完毕。(写的时候不能读)

3.2 不可重复读

介绍不可重复读是由于数据库中的数据虽然被正确地更新,但是因为在读的过程中发生并发访问,导致数据再次被更新,此时事务就根据读取的错误数据提交了。
举例事务1更新数据A,并正常提交。事务2开始读操作,多次读取数据A。但发生了并发访问,事务3再次更新数据A。此时事务2还在持续读取数据A,但得到的数据已经发生改变。
解决方案降低事务的并发,当发生读操作时,其他事务不能写,直到读操作执行完毕。(读的时候不能写)

3.3 幻读

介绍幻读和不可重复读十分相似,都是在读数据的过程中,数据发生改变而导致读取的数据前后不一致,只是幻读获得的错误数据规模更大,比如幻读带来了错误的结果集。个人粗略的认为幻读是不可重复读的进阶版。
举例事务1更新数据A,并正常提交。事务2开始读操作,多次读取包含数据A在内的数据集合,并根据数据集合进行了各种运算,产生了结果集。事务3并发访问将数据A删除了,此时事务2读取的数据集合就不包括数据A了,那么此时事务2完成提交后得到的结果集就与第一次不同了,就好像产生了幻觉一样(通俗来讲就是,“见了鬼了怎么两次得到的结果不一样?”)。
解决方案通常采用串行化的事务执行方式,即不再发生任何并发。

四、隔离级别

        从上文可以得知,使用事务时可能出现一些BUG。虽然出现了BUG,但一般都会有相应的解决方法,而MySQL中也提供了一些“锦囊妙计”来帮助使用者避免BUG,这就是隔离级别

MySQL提供了四种隔离级别:

隔离级别说明并行程度隔离程度效率数据准确度可能出现的BUG
read uncommitted读未提交。没有任何限制。最高最低最高最不准确脏读、不可重复读、幻读
read commited读已提交。写操作加锁。不准确不可重复读、幻读
repeatable read可重复读,默认的隔离级别。读操作加锁,写操作加锁。准确幻读
serializable串行化。读操作加锁,写操作加锁。不并行最高最低最准确

        以上四种隔离级别供使用者根据需求进行使用和调整,以适应不同情况。越往下隔离级别越高,隔离级别高能够带来准确的数据,但同时会导致程序执行效率变低,这就需要程序员根据不同的实际情况进行取舍了。


五、使用事务

使用事务的步骤:

开启事务start transaction;
打包SQL语句由多条SQL语句组成一个逻辑上的不可分割的整体;
回滚或提交

rollback/commit;

回滚(rollback):是指在事务提交时,如果发生错误,可以回滚到事务开始时,撤销所有已经执行的SQL语句。回滚可以用于确保数据的一致性,避免数据不一致的情况。使用Java进行编程时, rollback 一般会在代码里抛出异常,cry/catch 捕获时使用。简单来讲,回滚代表SQL全部执行失败。

提交(commit):是指在事务完成时,可以确认所有SQL语句都已经成功执行,确认将事务的数据写入到数据库中。简单来讲,提交代表SQL全部执行成功。


阅读指针 -> 《MySQL -- 什么是JDBC?如何使用JDBC进行编程?》

<MySQL> 什么是JDBC?如何使用JDBC进行编程?-CSDN博客介绍了什么是JDBC,以及演示了JDBC的基础使用。https://blog.csdn.net/zzy734437202/article/details/134473626

相关文章:

<MySQL> 什么是数据库事务?事务该如何使用?

目录 一、事务的概念 二、事务的核心特性 三、事务操作中的常见BUG 3.1 脏读 3.2 不可重复读 3.3 幻读 四、隔离级别 五、使用事务 一、事务的概念 “事务”是指一组操作,在逻辑上是不可分割的,组成这组操作的各个语句,或者全部执行成…...

Linux 网络:PMTUD 简介

文章目录 1. 前言2. Path MTU Discovery(PMTUD) 协议2.1 PMTUD 发现最小 MTU 的过程 3. Linux 的 PMTUD 简析3.1 创建 socket 时初始化 PMTUD 模式3.2 数据发送时 PMTUD 相关处理3.2.1 源头主机发送过程中 PMTU 处理3.2.2 转发过程中 PMTUD 处理 4. PMTUD 观察5. 参考链接 1. 前…...

BatchNormalization:解决神经网络中的内部协变量偏移问题

ICML2015 截至目前51172引 论文链接 代码连接(planing) 文章提出的问题 减少神经网络隐藏层中的”内部协变量偏移”问题。 在机器学习领域存在“协变量偏移”问题,问题的前提是我们划分数据集的时候,训练集和测试集往往假设是独立同分布(i.i.d)的,这种独立同分布更有利于…...

DAC实验(DAC 输出三角波实验)(DAC 输出正弦波实验)

DAC 输出三角波实验 本实验我们来学习使用如何让 DAC 输出三角波,DAC 初始化部分还是用 DAC 输出实验 的,所以做本实验的前提是先学习 DAC 输出实验。 使用 DAC 输出三角波,通过 KEY0/KEY1 两个按键,控制 DAC1 的通道 1 输出两种…...

许多网友可能还不知道,升级到Windows 11其实没那么复杂,只要符合几个条件可以了

如果你的Windows 10电脑可以升级Windows 11,现在怎么办?有几种方法可以免费安装新的操作系统。以下是你的选择。 如果你想升级到Windows 11,你可以随时购买一台已经安装了操作系统的新电脑。然而,如果你目前的Windows 10 PC满足所有必要的升级要求,那么在Windows 11免费的…...

ubuntu下载conda

系统:Ubuntu18.04 (1)下载安装包 wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2021.11-Linux-x86_64.sh 报错错误 403:Forbidden 解决方法 wget -U NoSuchBrowser/1.0 https://mirrors.tuna.tsingh…...

重磅 | 进一步夯实生态建设,朗思科技与阿里龙蜥完成兼容性认证

近日,北京朗思智能科技有限公司(以下简称“朗思科技”)自主研发的数字员工产品与OpenAnolis龙蜥社区龙蜥操作系统(Anolis OS)8完成兼容性认证。测试结果显示,双方产品相互兼容,功能正常&#xf…...

Qt给控件添加图片

双击qrc文件,选择下面的addFiles,将图片添加进来,然后选中图片右键Select All 设置控件字符: ui.btnSet->setText(""); 设置资源: ui.btnSet->setStyleSheet("QPushButton{background-image:…...

3.6-Dockerfile语法梳理及最佳实践

WORKDIR是设置当前docker的工作目录 ADD 和 COPY 为了将本地的一些文件添加到docker image里面,ADD 和 COPY的作用特别像,但是ADD 和 COPY还有一些区别,ADD不仅可以添加本地文件到docker里面,还可以将文件在添加到docker image里面…...

springboot集成nacos并实现自动刷新

目录 1.说明 2.示例 3.自动刷新的注意点 1.说明 springboot项目中存在好多配置文件,比如配置数据信息,redis信息等等,配置文件可以直接放在代码,也可以放在像nacos这样的组件中,实现动态的管理,修改配置…...

java面试八股文2023完整版详解110题附带答案

以下是一份Java面试八股文2023,涵盖了Java编程语言的核心概念和常用技术,帮助你更好地准备面试。 1. Java语言有哪些特点? Java语言是一种面向对象的编程语言,具有简单、面向对象、分布式、多线程、动态等优点。它是一种跨平台的…...

微服务实战系列之Token

前言 什么是“Token”? 它是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便返回给客户端;以后客户端只携带此Token请求数据即可。 简言之,Token其实就是用户身…...

DRF纯净版项目搭建和配置

一、安装模块和项目 1.安装模块 pip install django pip install djangorestframework pip install django-redis # 按需安装 2.开启项目和api (venv) PS D:\pythonProject\env_api> django-admin startproject drf . (venv) PS D:\pythonProject\env_api> python ma…...

AUTODL云服务器使用大致步骤(适合本人版)

(一)在官网上创建一个服务器 (二)远程连接指令: 改为: (三)连接后,可在中进行代码运行 输入一些指令 python .........

无需云盘,不限流量实现Zotero跨平台同步:内网穿透+私有WebDAV服务器

🔥博客主页: 小羊失眠啦. 🎥系列专栏:《C语言》 《数据结构》 《Linux》《Cpolar》 ❤️感谢大家点赞👍收藏⭐评论✍️ 无需云盘,不限流量实现Zotero跨平台同步:内网穿透私有WebDAV服务器 文章目…...

简朴博客系统测试报告

文章目录 一. 项目简介二. 测试概要三. 测试环境四. 测试执行概况及功能测试1. 手工测试1.1 手动测试用例编写1.2 执行的部分测试用例 2. 自动化测试Selenium2.1 编写测试用例2.2 自动化测试代码 3. 测试结果 五. 发现的问题 一. 项目简介 简朴博客系统是采用前后端分离的方式…...

Qt遇到常见问题记录

1.Qt版本选择 Qt4.8.7是Qt4的终结版本,是Qt4系列版本中最稳定最经典的 (很多嵌入式板子还是用Qt4.8),其实该版本是和Qt5.5差不多时间发布的。 参考链接 Qt 5.5 Released Qt5.6.3最最后支持xp系统的长期支持版本,Q…...

pm2在Windows环境中的使用

pm2 进程管理工具可以Windows操作系统上运行,当一台Windows电脑上需要运行多个进程时,或者运维时需要运行多个进程以提供服务时。可以使用pm2,而不再是使用脚本。 1. 使用PM2管理进程 1.1. 启动PM2项目 1.1.1. 直接启动项目 参数说明&…...

使用百度翻译API或腾讯翻译API做一个小翻译工具

前言 书到用时方恨少,只能临时抱佛脚。英文pdf看不懂,压根看不懂。正好有百度翻译API和腾讯翻译API,就利用两个API自己写一个简单的翻译工具,充分利用资源,用的也放心。 前期准备 关键肯定是两大厂的翻译API&#x…...

Flutter笔记:桌面应用 窗口定制库 bitsdojo_window

Flutter笔记 桌面应用窗口管理库 bitsdojo_window 作者:李俊才 (jcLee95):https://blog.csdn.net/qq_28550263 邮箱 :291148484163.com 本文地址:https://blog.csdn.net/qq_28550263/article/details/13446…...

零基础轻松拿捏!魔珐星云青少年健康运动教学数字人搭建全流程指南

大家好!本次给大家分享一款面向青少年体育教育的AI创意实践项目——青少年健康运动教学智能数字交互系统。本项目聚焦青少年体质健康痛点,围绕体育教学智能化升级需求,打造集健康知识教学、运动动作陪练、健康知识考核、运动能力评测于一体的…...

Unity发行版DLL调试实战:DnSpy无源码IL级断点指南

1. 这不是“反编译”,而是Unity游戏开发者的日常调试手段你有没有遇到过这样的情况:接手一个Unity发行版游戏,想快速验证某个功能逻辑是否按预期执行,或者排查一个偶发的崩溃,但手头只有打包后的Assembly-CSharp.dll&a…...

天文时序数据分析:机器学习评估、半监督学习与无监督方法实战

1. 项目概述:当机器学习遇见星空 处理海量的天文时序数据,比如来自Kepler、TESS这些“巡天巨眼”的光变曲线,早已不是靠人眼一张张图去翻的时代了。数据量太大,噪声复杂,信号微弱,传统方法常常力不从心。这…...

第2章 谁在危险中——被AI替代的五类程序员

第2章 谁在危险中——被AI替代的五类程序员 核心问题:哪些程序员最容易被AI替代?背后的原因是什么? 2.1 问题定义:一场正在发生的结构性塌陷 2.1.1 数据不会说谎 2026年1月12日,Ravio发布了一份让整个科技圈沉默的报告:过去一年,初级开发者岗位招聘量暴跌73%。 不是…...

基于EMA与轻量级机器学习的Wi-Fi链路质量预测实战

1. 项目概述与核心价值在工业自动化、仓储物流和智能制造等场景里,无线网络的稳定性正变得前所未有的重要。想象一下,一个自动导引运输车(AGV)正在执行物料搬运任务,或者一个机械臂正在与中央控制系统进行实时数据同步…...

软件测试行业的未来趋势:这3类测试将成为主流

随着数字化转型的深入推进,软件已经成为驱动各行业变革的核心生产力,从自动驾驶汽车到企业级云原生平台,从智慧医疗设备到工业互联网系统,软件的复杂度、规模和对安全性的要求都在呈指数级增长。作为软件质量保障的核心环节&#…...

SHAP原理与特征贡献解析

SHAP(SHapley Additive exPlanations)是一种基于博弈论中Shapley值的模型解释方法,它为机器学习模型的预测提供了一种统一、理论完备的特征归因框架。其核心思想是将模型的预测值视为所有特征协同合作的“总收益”,然后公平地分配…...

混合物理-ML辐射方案:攻克气候模型中次网格云效应的新范式

1. 项目概述与核心挑战在气候模拟这个庞大的数字沙盘中,地球系统模型(ESM)是我们理解未来气候演变的核心工具。然而,这个沙盘有一个长期存在的“颗粒度”难题:受限于计算资源,模型的水平分辨率通常在100到2…...

023、深度可分离卷积:MobileNet背后的计算优化

深度可分离卷积:MobileNet背后的计算优化 一个让我加了两天班的bug 去年调试一块基于Cortex-M7的AI推理引擎,跑MobileNetV1时发现推理速度比理论计算慢了整整一个数量级。当时我盯着逻辑分析仪上的波形,CPU在卷积层卡了将近300ms——这不对劲,理论计算应该只要30ms。 排…...

从原理到防御:手把手教你用Python模拟ZipCrypto加密,理解密码为何能被‘撞开’

从零构建ZipCrypto加密模拟器:Python实战与密码安全深度解析 当你用鼠标双击那个带锁的ZIP图标,输入密码后看到文件顺利解压时,是否好奇过背后的魔法?现代加密算法就像数字世界的机械钟表——精密的齿轮咬合运转,而我们…...