Java学习-MySQL-事务

news/2024/4/20 12:39:37/文章来源:https://blog.csdn.net/weixin_45876155/article/details/130324968

Java学习-MySQL-事务

ACID原则:原子性、一致性、隔离性、持久性

原子性(Atomicity)

两个步骤要么一起成功,要么一起失败,不可能只成功一个。
举例: A账户400元,B账户600元,A向B转账200元,要么转账成功,A账户剩余200元,B账户800元,要么转账失败,A账户还是400元,B账户600元,不可能存在A账户转账成功剩余200元,B账户没有收到转账还是600元,或者A账户没有扣费还是400元,B账户已经到账变成800元。

一致性(Consistency)

操作前与操作后的状态一致。
举例: 转账前A账户400元,B账户600元,总和1000元,转账后A账户剩余200元,B账户800元,总和还是1000元.

隔离性(Isolation)

多个拥护同时操作,排除其他事务对本次事务的影响。

持久性(Durability)

事务结束后的数据不会随着外界原因导致数据丢失。事务一旦提交则不可逆,被持久化到数据库中。

脏读

一个事务读取了另一个事务未提交的数据
举例: A账户400元,B账户600元,C账户200元,A账户读取到B账户的余额,在向B账户转账200元的时候,C账户读取到B账户的余额还有600元,向B账户转账100元。A账户转账成功,显示B账户的余额为800元,C账户转账成功,显示B账户的余额为700元。

幻读

在一个事务内读取到了其他事务插入的数据,导致前后读取不一致

流程

-- 关闭事务自动提交
SET autocommit=0-- 事务开启
START TRANSACTIONINSERT xx
INSERT xx-- 提交:持久化(成功)
COMMIT-- 回滚:恢复原状(失败)
ROLLBACK-- 事务结束,开启自动提交
SET autocommit=1SAVEPOINT -- 设置保存点
ROLLBACK TO SAVEPOINT -- 回滚到保存点
RELEASE SAVEPOINT -- 删除保存点

在这里插入图片描述

模拟场景

CREATE DATABASE shop CHARACTER SET utf8 COLLATE utf8_general_ci
USE shopCREATE TABLE `account`(
`id` INT(3)NOT NULL AUTO_INCREMENT,
`name` VARCHAR(20) NOT NULL,
`money` DECIMAL(9,2) NOT NULL,
PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8INSERT INTO `account`(`name`,`money`)VALUES
('A',8000),('B',10000)

在这里插入图片描述

转账

SET autocommit=0
START TRANSACTIONUPDATE `account` SET `money`=`money`-5000 WHERE `name`='A'
UPDATE `account` SET `money`=`money`+5000 WHERE `name`='B'

在这里插入图片描述
未提交,回滚,回到初始状态

ROLLBACK;

在这里插入图片描述
提交,数据持久化

UPDATE `account` SET `money`=`money`-5000 WHERE `name`='A'
UPDATE `account` SET `money`=`money`+5000 WHERE `name`='B'
COMMIT;

在这里插入图片描述
再次回滚只能维持新的状态,无法回到提交前的状态

ROLLBACK;
SET autocommit=1

在这里插入图片描述

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

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

相关文章

Yolo v1 笔记

个人不太懂的点 1.损失函数的4与5项 【论文解读】Yolo三部曲解读——Yolov1 - 知乎 https://www.youtube.com/watch?vNkFENlEb4kM&t672s 训练阶段: C_i 预测值:由网络输出出来7*7*30中第一个bbox和第二个bbox的置信度confidence C_i^hat 标签值…

PTA L2-046 天梯赛的赛场安排 (25 分)

天梯赛使用 OMS 监考系统,需要将参赛队员安排到系统中的虚拟赛场里,并为每个赛场分配一位监考老师。每位监考老师需要联系自己赛场内队员对应的教练们,以便发放比赛账号。为了尽可能减少教练和监考的沟通负担,我们要求赛场的安排满…

C++ 类和对象(中)构造函数 和 析构函数

上篇链接:C 类和对象(上)_chihiro1122的博客-CSDN博客 类的6个默认成员函数 我们在C当中,在写一些函数的时候,比如在栈的例子: 如上述例子,用C 返回这个栈是否为空,直接返回的话&am…

利用Python操作Mysql数据库

我们在进行Python编程的时候,时常要将一些数据保存起来,其中最方便的莫过于保存在文本文件了。但是如果保存的文件太大,用文本文件就不太现实了,毕竟打开都是个问题,这个时候我们需要用到数据库。提到数据库&#xff0…

json模块和pickle模块

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起探讨和分享Linux C/C/Python/Shell编程、机器人技术、机器学习、机器视觉、嵌入式AI相关领域的知识和技术。 json和pickle模块 json模块序列化与反序列化json模块中的方法 pickle模块 专栏:《python从…

JAVAweb开发学习

六、MybatisPlus快速上手 数据库操作 注意!注意!注意!springboot版本选择2.7.2 1.ORM介绍(对象关系映射) 既包含存储,又包含映射。将java类映射到数据库 2.MybatisPlus介绍 ORM框架 数据库操作来啦…

【计算机网络】为什么 TCP 每次建立连接时,初始化序列号都要不一样呢?

【计算机网络】为什么 TCP 每次建立连接时,初始化序列号都要不一样呢? 为什么 TCP 每次建立连接时,初始化序列号都要不一样呢? 主要原因是为了防止历史报文被下一个相同四元组的连接接收。 TCP 四次挥手中的 TIME_WAIT 状态不是会…

机械键盘、口袋打印机,万元奖金等你拿!「万象格新」AI绘画X海报设计大赛即将开启...

号外!「万象格新」大赛开启 如果阳光暖到你心里,那一定是一格在想你~ 春夏交替,万物焕发生机,明媚色彩娱情惬意 在这样一个美好的时节 如果你: 心中荡漾着色彩斑斓的 AI 绘画创意 想要 show 出独到的审美与非凡设计能力…

吴恩达团队AI诊断心律失常研究:准确率超人类医生

2019年,吴恩达团队在AI医疗领域实现了一项革命性的突破,他们成功地让AI诊断心律失常,其准确率高达83.7%,超过了人类心脏病医生的78.0%。这项研究成果已经发表在了知名期刊Nature Medicine上。 一、如何让AI学会诊断心律失常&…

闲谈【Stable-Diffusion WEBUI】的插件:美不美?交给AI打分

文章目录 (零)前言(一)咖啡店艺术评价(Cafe Aesthetic) (零)前言 本篇主要提到了WEBUI的Cafe Aesthetic插件,这是一个相对独立的插件,单独标签页,…

Python小姿势 - Python基础知识

Python基础知识 Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。 Python的创始人为吉多范罗苏姆(Guido van Rossum),于1989年底发布第一个公开发行版本——0.9.0。 自2004年以来,Python已经成为顶级开源项目&…

希尔排序的实现

希尔排序是插入排序的一种升级,其基本思想是: 先选定一个整数,把待排序文件中所有记录分成个组,所有距离为的记录分在同一组内,并对每 一组内的记录进行排序。然后,取,重复上述分组和排序的工 作…

使用Linux运维常识

一.基础操作 1.终端常用快捷键 快捷键描述ctrl键盘左键向左跳一个单词ctrl键盘右键向右跳一个单词Ctrl c停止当前正在运行的命令。Ctrl z将当前正在运行的命令放入后台并暂停它的进程。Ctrl d关闭当前终端会话。Ctrl l清屏,也可以用clear命令实现Tab自动补全当…

Asp.NET CORE实验室信息管理系统源码,支持IIS独立部署,Docker部署

技术架构:Asp.NET CORE 3.1 MVC SQLserver Redis等 基于B/S架构的实验室管理系统源码,整个系统的运行基于WEB层面,只需要在对应的工作台安装一个浏览器软件有外网即可访问。全套系统采用云部署模式,部署一套可支持多家医院检验…

自定义RecyclerView.LayoutManager实现类实现卡片层叠布局的列表效果

一.前言 先看效果(大佬们请忽略水印): 卡片层叠列表的实现效果已经发布成插件,集成地址:implementation ‘com.github.MrFishC:YcrCardLayoutHepler:v1.1’; 先讲解如何快速实现,然后再来讲解…

托福高频真词List05 // 附托福TPO阅读真题

目录 4月23日单词 生词 熟词 4月24日真题 4月23日单词 生词 sparsethinly distributedadj 稀疏的sparselythinlyadv 稀疏地congestion / kənˈdʒestʃən / overcrowdingn 拥挤continuallyregularlyadv 持续的eradicateeliminatev 消除facilitatemake easiereasev 使..…

《面试1v1》java泛型

我是 javapub,一名 Markdown 程序员从👨‍💻,八股文种子选手。 面试官:小伙子,说实话,泛型这个机制一开始我也是一头雾水,搞不太明白它到底要解决什么问题。你能不能不那么书呆子,给我普普通通地讲一讲泛型? 候选人…

如何测试信号源或者发射机的回波损耗

信用源或者发射机的return loss测试过程 1.用网分线缆的第一步就是看线的抖动情况,后面还是要多注意 经过一系列排查后,选用两个抖动比较小的线缆,然后开始测试另外一台仪器。 2.检查测试仪器的输出功率,见图1 打开信号源或者发射…

可以一学的代码优化小技巧:减少if-else冗余

前言 if-else 语句对于程序员来说,是非常非常熟悉的一个判断语句,我们在日常开发和学习中都经常看见它,if-else语句主要用于需要做出选择的地方进行判断,这里就不再赘述if-else语法和特点了。 ​ 我们在写代码(如图下…

PC1 - 搭建项目

先看路由,可以查看功能模块划分。熟悉什么看什么 router文件夹下routerConfig.tsx 配置路由,创建模块文件(写好内容模块),lazy可懒加载导入。App.tsx配置一级路由,配置二级路由出口 { path:/, element: …