数据库-事务

在这里插入图片描述

简介

事务(Transaction)是指数据库管理系统(DBMS)中执行的一个操作序列,这些操作要么全部成功执行,要么全部不执行,且在执行过程中保持数据的一致性。

例如:
张三给李四转账,张三账户余额少1000,而李四账户余额增加1000。这一组操作必须在一个事务范围内,要么都成功,要么都失败。

事务操作

首先我们拥有一个数据库my_db
创建数据表account ,插入数据

-- 首先删除表(如果存在)
DROP TABLE IF EXISTS account;

-- 创建表
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);

image.png

未控制事务

正常情况
-- 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 = '李四';

image.png

异常情况

把数据都恢复到2000, 然后再次一次性执行上述的SQL语句,中间添加文本 程序异常...模拟操作出现异常的情况
恢复数据

update account set money =2000 where name = '张三' or name = '李四'
-- 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 = '李四';

image.png
张三的钱没了,李四的钱也没有加上

控制事务

(正常情况)

再次将数据恢复到初始状态

update account set money =2000 where name = '张三' or name = '李四'

查看当前事务提交方式,为1是自动提交

select @@autocommit;

image.png
设置为手动提交

set @@autocommit = 0;

这样我们的sql就不会自动提交会变为手动提交
再次执行正常情况下的sql语句
我们还没有提交,所以再次查看时数据并没有变化
image.png

-- 提交事务
commit

提交后再次查看
image.png

(异常情况)

数据恢复到初始状态

update account set money =2000 where name = '张三' or name = '李四'

commit

执行异常情况下的sql语句
一旦执行出错,我们就需要回滚事务

-- 回滚事务
rollback ;

image.png

还有一种开启事务的方法

-- 开启事务
START TRANSACTION 或 BEGIN ;

事务特性

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

并发事务问题

脏读:一个事务读到另一个事务还没有提交的数据 (事务B读取到了A未提交的数据)

不可重复读: 一个事务先后读取同一条记录,但两次读取的数据不同,称为不可重复读(事务A两次读取同一条数据,但是读取到的数据却是不一样的。)

幻读: 一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,又发现这行数据已经存在,好像出现幻影

隔离级别

  1. 读未提交(Read Uncommitted):在这个级别下,一个事务可以读取另一个事务未提交的数据。这意味着一个事务可能会看到其他事务的中间结果。这种隔离级别最低,可能导致脏读、不可重复读和幻读问题。
  2. 读已提交(Read Committed):这是大多数数据库系统默认的隔离级别。在这个级别下,一个事务只能读取到已经提交的数据。这避免了脏读问题,但是仍然可能出现不可重复读和幻读问题。
  3. 可重复读(Repeatable Read):在这个级别下,一个事务在执行期间多次读取相同的数据,将会看到同样的结果,即使其他事务已经对该数据进行了更新并提交。这可以避免脏读和不可重复读问题,但仍然可能出现幻读问题。
  4. 串行化(Serializable):这是最高的隔离级别。在这个级别下,所有的事务按照串行化的方式执行,因此可以避免脏读、不可重复读和幻读问题。但是,由于串行化执行会导致性能下降,因此一般情况下不建议使用这个隔离级别,除非特别需要确保数据的完整性和一致性。
-- 查看事务隔离级别
SELECT @@TRANSACTION_ISOLATION;

image.png
MySQL默认的隔离级别是可重复读

-- 当前会话设置隔离级别
set session transaction isolation level read uncommitted ;
-- 查看事务隔离级别
SELECT @@TRANSACTION_ISOLATION;

image.png

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

知识图谱推理算法综述(上):基于距离和图传播的模型

背景 知识图谱系统的建设需要工程和算法的紧密配合,在工程层面,去年蚂蚁集团联合 OpenKG 开放知识图谱社区,共同发布了工业级知识图谱语义标准 OpenSPG 并开源;算法层面,蚂蚁从知识融合,知识推理&#xff…

前三次笔记、表单和五彩导航

骨架&#xff1a; 笔记&#xff1a; 需要有包裹的内容&#xff0c;用双标签&#xff0c;不需要包裹内容就可以完成的操作用单标签 标签之间的关系只有父子关系和兄弟关系 标题标签只有h1-h6&#xff0c;且大小依次递减&#xff0c;独占一行 在段落标签“<p> </p>”…

【物联网开源平台】tingsboard二次开发

别看这篇了&#xff0c;这篇就当我的一个记录&#xff0c;我有空我再写过一篇&#xff0c;编译的时候出现了一个错误&#xff0c;然后我针对那一个错误执行了一个命令&#xff0c;出现了绿色的succes,我就以为整个tingsboard项目编译成功了&#xff0c;后面发现的时候&#xff…

TransUNet论文笔记

论文&#xff1a;TransUNet&#xff1a;Transformers Make Strong Encoders for Medical Image Segmentation 目录 Abstract Introduction Related Works 各种研究试图将自注意机制集成到CNN中。 Transformer Method Transformer as Encoder 图像序列化 Patch Embed…

windows下的vscode + opencv4.8.0(C++) 配置

1.添加环境变量 D:\mingw64\bin 2.安装vscode 3.下载opencv 4.8.0 4.程序引用第三方库(opencv为例) 打开CMakeLists.txt&#xff0c;引入头文件&#xff0c;使用include_directories 加入头文件所在目录。静态链接库link_directories # 头文件 include_directories(D:/ope…

Java中 List 集合,通过 Stream 流进行排序总结

一、数据准备 public class OrderTest {private String channelCode;private BigDecimal rate;// 省略 getter、setter、toString()、constructor }List<OrderTest> orderTestList new ArrayList<>();OrderTest z09 new OrderTest("Z09", new BigDeci…

[Qt学习笔记]Qt实现自定义控件SwitchButton开关按钮

1、功能介绍 在项目UI中使用较多的打开/关闭的开关按钮&#xff0c;一般都是找图片去做效果&#xff0c;比如说如下的图像来表征打开或关闭。 如果想要控件有打开/关闭的动画效果或比较好的视觉效果&#xff0c;这里就可以使用自定义控件&#xff0c;使用Painter来绘制控件。软…

C++ primer 第十五章

1.OPP:概述 面向对象程序设计的核心思想是数据抽象、继承和动态绑定。 通过继承联系在一起的类构成一种层次关系&#xff0c;在层次关系的根部的是基类&#xff0c;基类下面的类是派生类 基类负责定义在层次关系中所有类共同拥有的成员&#xff0c;而每个派生类定义各自特有…

FFmpeg+mediamtx 实现将本地摄像头推送成RTSP流

文章目录 概要推流过程实现过程安装FFmpeg安装Mediamtx 启动推流 概要 FFmpegmediamtx实现将本地摄像头推送成RTSP流 FFmpeg 版本号为&#xff1a;N-114298-g97d2990ea6-20240321 mediamtx 版本号为&#xff1a;v1.6.0 推流过程 摄像头数据&#xff0c;经过ffmpeg的推流代码…

带手柄聚四氟乙烯烧杯方便省力好用

可定制各种规格形状四氟烧杯&#xff0c;也可以单独配盖子。 注&#xff1a;可配套我公司生产的防腐电热板、赶酸电热板后期赶酸使用。 产品特性 1.外观纯白色&#xff1b; 2.耐高低温&#xff1a;可使用温度-200℃&#xff5e;&#xff0b;250℃&#xff1b; 3.耐腐蚀&am…

基于SpringBoot+MyBatis+Vue的电商智慧仓储管理系统的设计与实现(源码+LW+部署+讲解)

前言 博主简介&#x1f468;&#x1f3fc;‍⚕️&#xff1a;国内某一线互联网公司全栈工程师&#x1f468;&#x1f3fc;‍&#x1f4bb;&#xff0c;业余自媒体创作者&#x1f4bb;&#xff0c;CSDN博客专家&#x1f3c6;&#xff0c;Java领域优质创作者&#x1f4d5;&#x…

【直播预约】镭速邀您共赴2024年首场线上直播沙龙!

为了深入探讨智能制造数据安全交互的前沿趋势&#xff0c; 解锁数据安全在智能制造业的无限潜能&#xff0c; 镭速传输即将举办一场&#xff0c; 不容错过的2024首场线上直播沙龙&#xff01; 镭速传输&#xff0c;将在03月27日 14:30 在视频号进行直播 镭速助力行业数字化…

Jmeter使用教程,从安装到HTTP的压测全部实战教程解析,不学后悔系列

作为一名开发工程师&#xff0c;当我们接到需求的时候&#xff0c;一般就是分析需要&#xff0c;确定思路&#xff0c;编码&#xff0c;自测&#xff0c;然后就可以让测试人员去测试了。在自测这一步&#xff0c;作为开发人员&#xff0c;很多时候就是测一下业务流程是否正确&a…

IBM:《2023IBM年报》

2024年3月12日&#xff0c;IBM分享了《2023IBM年报》。 报告节选&#xff1a; 在本财年&#xff0c;IBM 的收入为 619 亿美元&#xff0c;按固定汇率计算增长 3%&#xff0c;自由现金流为 112 亿美元&#xff0c;同比增长 19 亿美元。我们经历了对新 watsonx 平台日益增长的需…

Python:基础语法

一、import与from.....import 有时候我们需要使用一些第三方库或包时&#xff0c;我们就需要通过import或from.....import导入模块。 # 导入库 import sys print("hello,world") 当我们自己写了些函数&#xff0c;在其他py文件&#xff0c;我们也可以通过from.....im…

Selenium 自动化 —— 浏览器窗口操作

更多内容请关注我的专栏&#xff1a; 入门和 Hello World 实例使用WebDriverManager自动下载驱动Selenium IDE录制、回放、导出Java源码 当用 Selenium 打开浏览器后&#xff0c;我们就可以通过 Selenium 对浏览器做各种操作&#xff0c;就像我们日常用鼠标和键盘操作浏览器一…

初学php反序列化

php中&#xff0c;序列化和反序列化是相对的两个过程&#xff0c;序列化是把变量或对象转化成字符串的过程 反序列化是把字符串转换为变量过着对象的过程 在php的反序列化中&#xff0c;存在类&#xff0c;当类被以特定的方式就会触发魔术方法&#xff0c;在实行序列化的过程…

element ui的下拉选择单选和多选

单选&#xff1a; html代码&#xff1a; <el-form-item label"指令分类: "><el-select v-model"cid" style"width:100%;" placeholder"请选择指令分类" clearable><el-option v-for"item in orderCidList"…

服务器中有g++,但是查询不到,Command ‘g++‘ not found

有gcc但是查询不到g&#xff0c;gcc版本为9.5.0 (base) zyICML:~$ g -V Command g not found, but can be installed with: apt install g Please ask your administrator. 突然就出现这个问题&#xff0c;导致detectron装不上&#xff0c;现在有时间了专门研究下怎么解决 这…

React Native 应用打包

引言 在将React Native应用上架至App Store时&#xff0c;除了通常的上架流程外&#xff0c;还需考虑一些额外的优化策略。本文将介绍如何通过配置App Transport Security、Release Scheme和启动屏优化技巧来提升React Native应用的上架质量和用户体验。 配置 App Transport…