MySQL 事务

目录

一、什么是事务

二、事务的特性

三、事务使用案例

四、事务并发问题

五、设置事务的隔离级别(解决读的问题)


一、什么是事务

        MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你既需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!在 MySQL 中,事务是一组SQL语句的执行,它们被视为一个单独的工作单元。

        简单来说,事务:组成各个数据的执行的单元,要么都成功,要么都不成功。

举例: 转账的功能,冠希给美美转1000元钱。开启使用事务,先给冠希扣除掉1000元,再给美美加上1000元,事务结束了。(防止冠希扣钱了,但是美美没有收到)

二、事务的特性

  • 原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。

  • 一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。

  • 隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。

  • 持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

三、事务使用案例

四、事务并发问题

不考虑事务的隔离性会引发的问题(理解)

1.脏读:一个事务读取到了另一个事务未提交的数据!

脏读(Dirty Read)发生在一个事务读取了另一个事务未提交的数据。如果那个事务回滚,读取的数据就是无效的。例如,事务A读取了事务B修改但未提交的数据,如果事务B回滚,事务A读到的就是“脏”的数据。

2.不可重复读:一个事务读取到了另一个事务提交的数据,导致了多次查询的结果不一致。强调的是update,修改记录 的数据。

不可重复读(Non-Repeatable Read)是指在同一事务中,多次读取同一数据集合时,由于其他事务的修改提交,导致两次读取的数据不一致。例如,事务A读取了一条数据,事务B修改了这条数据并提交,当事务A再次读取时,数据已经发生变化。

3.虚度(幻读):一个事务读取到了另一个事务提交的数据,导致了多次查询的结果不一致。强调是insert,向表中添 加一条数据。

幻读(Phantom Read)指的是当一个事务重新执行一个查询时,返回一组符合查询条件的结果集,但这个结果集中包含了另一个事务新增的数据。例如,事务A根据条件查询得到N条数据,事务B插入了符合条件的新数据,当事务A再次执行查询时,就会发现多了数据。

五、设置事务的隔离级别(解决读的问题)

1.事务的隔离级别(设置数据库的隔离级别,根据级别的不同,解决上述的读的问题) * Read uncommitted‐‐ 什么都解决不了 * Read committed * Repeatable read * Serializable‐‐ 避免脏读,但是不可重复读和虚读有可能产生‐‐ 避免脏读和不可重复读,虚度有可能产生的‐‐ 避免各种读

2.4种隔离级别有安全性和效率

安全 Serializable > Repeatable read > Read committed > Read uncommitted * 

效率 Serializable < Repeatable read < Read committed < Read uncommitted

3.数据库都有自己默认的隔离级别 * MySQL的数据库,默认的隔离级别是Repeatable read,避免脏读和不可重复读。

演示脏读

1.脏读:一个事务读取到了另一个事物未提交的数据。

2.进行测试 * 开启两个窗口,一个A窗口(左),一个B窗口(右)。
* 在A窗口中,查询A窗口的隔离级别:select @@tx_isolation;
* 设置A窗口的隔离级别为最低级别: set session transaction isolation level read uncommitted; 避免脏读和演示不可重复读   避免不可重复读  

* 设置A窗口的隔离级别为最低级别: set session transaction isolation level read uncommitted;     * 在两个窗口中,都开启事物     * start transaction;        
* 在B窗口中完成转账的工作。(冠希给美美转1千钱)     * update t_account set money = money ‐ 1000 where username = '冠希';         * update t_account set money = money + 1000 where username = '美美';        
* 注意:B窗口的事物未提交。        
* 在A窗口中,查询的结果(美美)    * select * from t_account;        
* 在B窗口中,回滚的是事物     * rollback;

避免脏读和演示不可重复读       

1.避免脏读的发生,提高的隔离级别。* set session  transaction isolation level  read committed;          * 在两个窗口中,都开启事物     * start transaction;        
* 在B窗口中完成转账的工作。(冠希给美美转1千钱)     * update t_account set money = money ‐ 1000 where username = '冠希';         * update t_account set money = money + 1000 where username = '美美';        
* 注意:事物还是没有提交,但是你需要观察A窗口中是否能读取到B创建未提交的数据。         * 在A窗口中,查询的结果(美美)     * select * from t_account;                 
* 在B窗口中把事物提交了     * commit;             
* 在A窗口中,再查询一次钱。    
* 两次查询的结果不一致,发生了不可重复读。

避免各种读

1.设置隔离级别:set session transaction isolation level serializable;
* 在两个窗口中,都开启事物 * start transaction;
* 在B窗口中添加一条数据 * insert into t_account values (null,'小苍',10000);
* 注意:没有提交事物
* 在A窗口中查询数据库 * select * from t_account;

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

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

相关文章

基于Oracle与PyQt6的电子病历多模态大模型图形化查询系统编程构建

一、引言 1.1 研究背景阐述 在当今数字化时代,医疗行业正经历着深刻的变革,数字化转型的需求日益迫切。电子病历(EMR)作为医疗信息化的核心,其管理的高效性和数据利用的深度对于提升医疗服务质量、优化临床决策以及推动医学研究具有至关重要的意义。传统的电子病历管理系…

强化学习-蒙特卡洛方法

强化学习-数学理论 强化学习-基本概念强化学习-贝尔曼公式强化学习-贝尔曼最优公式强化学习-值迭代与策略迭代强化学习-蒙特卡洛方法 文章目录 强化学习-数学理论一、蒙特卡洛方法理论(Monte Carlo, MC)二、MC Basic2.1 算法拆解2.2 MC Basic算法 三、MC Exploring Starts3.1 …

Harmony面试模版

1. 自我介绍 看表达能力、沟通能力 面试记录&#xff1a; 2. 进一步挖掘 2.1. 现状 目前是在职还是离职&#xff0c;如果离职&#xff0c;从上一家公司离职的原因 2.2. 项目经验 如果自我介绍工作项目经验讲的不够清楚&#xff0c;可以根据简历上的信息再进一步了解 面试记…

eBay账号安全攻略:巧妙应对风险

在跨境电商的浪潮中&#xff0c;eBay宛如一座璀璨的灯塔&#xff0c;照亮了无数买卖双方的交易之路。但别忘了&#xff0c;网络安全的阴霾也在悄然蔓延&#xff0c;让eBay账号时刻处于黑客攻击、数据泄露、钓鱼诈骗等风险的阴影之下。别担心&#xff0c;今天就来为你支支招&…

浅谈云计算19 | OpenStack管理模块 (上)

OpenStack管理模块&#xff08;上&#xff09; 一、操作界面管理架构二、认证管理2.1 定义与作用2.2 认证原理与流程2.2.1 认证机制原理2.2.2 用户认证流程 三、镜像管理3.1 定义与功能3.2 镜像服务架构3.3 工作原理与流程3.3.1 镜像存储原理3.3.2 镜像检索流程 四、计算管理4.…

【Uniapp-Vue3】uni-api交互反馈showToast的使用方法

如果想要显示弹窗&#xff0c;就可以使用showToast去显示弹窗。 uni.showToast({ title:"显示内容", icon:"标志样式" }) 其中&#xff0c;title只能显示7个字符的内容&#xff0c;如果想要显示全&#xff0c;只能不设置icon。 icon默认是success&#xf…

LabVIEW与WPS文件格式的兼容性

LabVIEW 本身并不原生支持将文件直接保存为 WPS 格式&#xff08;如 WPS 文档或表格&#xff09;。然而&#xff0c;可以通过几种间接的方式实现这一目标&#xff0c;确保您能将 LabVIEW 中的数据或报告转换为 WPS 可兼容的格式。以下是几种常见的解决方案&#xff1a; ​ 导出…

如何异地远程访问本地部署的Web-Check实现团队远程检测与维护本地站点

文章目录 前言1.关于Web-Check2.功能特点3.安装Docker4.创建并启动Web-Check容器5.本地访问测试6.公网远程访问本地Web-Check7.内网穿透工具安装8.创建远程连接公网地址9.使用固定公网地址远程访问 前言 在日常开发和维护过程中&#xff0c;确保Web应用稳定运行是至关重要的。…

nginx 修改内置 404 页面、点击劫持攻击。

1、在部署前端项目的目录下增加 404.html 页面&#xff1a;/opt/web/404.html。 2、在 nginx 配置中增加 404 配置&#xff1a; root /opt/web; # 设置根目录的配置error_page 404 404.html; location /404.html {root /opt/web;# 指定 404 页面所在的根目录internal;# 确保…

VD:生成a2l文件

目录 前言Simulink合并地址 ASAP2 editor 前言 我之前的方法都是通过Simulink模型生成代码的过程中顺便就把a2l文件生成出来了&#xff0c;这时的a2l文件还没有地址&#xff0c;所以紧接着会去通过elf文件更新地址&#xff0c;一直以为这是固定的流程和方法&#xff0c;今天无…

浅谈云计算20 | OpenStack管理模块(下)

OpenStack管理模块&#xff08;下&#xff09; 五、存储管理5.1 存储管理概述 5.2 架构设计5.2.1 Cinder块存储架构5.2.2 Swift对象存储架构 六、网络管理6.1 网络管理概述6.2 架构解析6.2.1 Neutron网络服务架构6.2.2 网络拓扑架构 6.3 原理与流程6.3.1 网络创建原理6.3.2 网络…

Kafka常用命令

如何进行到Docker容器中运行Kafka&#xff1a; docker ps 找到CONTAINER ID 去前三位 执行docker exec -it bbd bin/bash进入到docker中进入到/opt/bitnami/kafka/bin中执行kafka脚本 ------------------------------------------------------------------------------------…

仿射密码实验——Python实现(完整解析版)

文章目录 前言实验内容实验操作步骤1.编写主程序2.编写加密模块3.编写解密模块4.编写文件加解密模块 实验结果实验心得实验源码scirpt.pyusefile.py 前言 实验目的 1&#xff09;初步了解古典密码 2&#xff09;掌握仿射密码的实现 实验方法 根据下图仿射密码&#xff08;变换…

回归预测 | MATLAB实SVM支持向量机多输入单输出回归预测

效果一览 基本介绍 回归预测 | MATLAB实SVM支持向量机多输入单输出回归预测 …………训练集误差指标………… 1.均方差(MSE)&#xff1a;166116.6814 2.根均方差(RMSE)&#xff1a;407.5741 3.平均绝对误差&#xff08;MAE&#xff09;&#xff1a;302.5888 4.平均相对百分误…

Oracle 批量投入数据方法总结

目录 零. 待投入数据的表结构一. INSERT INTO ... SELECT投入数据1.1 普通的方式投入数据1.2 并行插入&#xff08;Parallel Insert&#xff09;投入数据 二. PL/SQL 循环投入数据2.1 脚本介绍2.2 效果 三. &#x1f4aa;PL/SQL FORALL 批量操作&#x1f4aa;3.1 脚本介绍3.2 效…

Git学习笔记

Git学习笔记 目录 版本控制 本地版本控制 集中版本控制 分布式版本控制 基本使用方式 Git Config Git Remote Git Add Objects Refs Annotation Tag 追溯历史版本 修改历史版本 Git GC Git Clone & Pull & Fetch Git Push 常见问题 不同的工作流 集…

【Block总结】掩码窗口自注意力 (M-WSA)

摘要 论文链接&#xff1a;https://arxiv.org/pdf/2404.07846 论文标题&#xff1a;Transformer-Based Blind-Spot Network for Self-Supervised Image Denoising Masked Window-Based Self-Attention (M-WSA) 是一种新颖的自注意力机制&#xff0c;旨在解决传统自注意力方法在…

卷积神经05-GAN对抗神经网络

卷积神经05-GAN对抗神经网络 使用Python3.9CUDA11.8Pytorch实现一个CNN优化版的对抗神经网络 简单的GAN图片生成 CNN优化后的图片生成 优化模型代码对比 0-核心逻辑脉络 1&#xff09;Anacanda使用CUDAPytorch2&#xff09;使用本地MNIST进行手写图片训练3&#xff09;…

怎么在iPhone手机上使用便签进行记录?

宝子们&#xff0c;在这个快节奏的时代&#xff0c;灵感的火花总是一闪而过&#xff0c;待办事项也常常让人应接不暇。好在咱们的 iPhone手机便签超给力&#xff0c;能满足各种记录需求&#xff01;今天就来给大家分享一下&#xff0c;如何在 iPhone 手机上巧用便签&#xff0c…

基于微信小程序的摄影竞赛系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…