MySQL学习笔记------事务

事务

事务是一组操作的集合,他是一个不可分割的单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败

事务操作

create table account(id int comment 'ID',name varchar(10) comment '姓名',money int comment '余额'
)comment '账户';
insert into account (id, name, money) VALUES (1,'张三',2000),(2,'李四',2000);
#转账操作
update account set money=money-1000 where name='张三';
update account set money=money+1000 where name='李四';

查看/设置事务提交方式

select @@autocommit;

set @@autocommit=0;#1自动提交,0手动提交

提交事务

commit;//事务提交方式设置为手动时,操作完需要提交,否则数据不发生变化,例如:

操作前

运行以下代码

#设置提交方式
set @@autocommit=0;
#转账操作
update account set money=money-1000 where name='张三';
update account set money=money+1000 where name='李四';

 表中数据为

提交后

回滚事务

rollback;

事务出现异常时,回滚数据恢复执行前

开启事务

start transaction或begin;//此时事务为手动提交

#查看提交方式
select @@autocommit;
#设置提交方式
set @@autocommit=0;
#提交
commit ;
#开启事务
start transaction ;
#回滚事务
rollback ;

 事务四大特性

原子性:事务是不可分割的最小操作单元,要么全部成功要么全部失败

一致性:事务完成时,必须使所有数据都保持一致状态

隔离性:数据库提供的隔离机制,保证事务在不受外部并发操作影响的独立环境运行

持久性:事务一旦提交,他对数据库中的数据的改变是永久性的

并发事务问题

脏读:一个事务读到另一个事务还没有提交数据

不可重复读:一个事务先后读取同一条记录,但两次读到的数据不同,称之为不可重复读(另一个事务修改并提交)

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

事务隔离级别

打错为规避

查看事务隔离级别

select@@transaction_isolation;

设置事务隔离级别

set [session|global] transaction isolation{read uncommitted | read committed | repeatable read| serializable}      // session会话,针对当前客户端有效

#查看隔离级别
select @@transaction_isolation;
#设置隔离级别
set session transaction isolation level read committed ;

 read commited可避免脏读:

未提交:

提交后:

 read committed不能避免不可重复读

其他

 其他可以用同样方法验证

repeatable read右边修改提交,左边使用commit之前,select*from account读取表数据不变

serializable只允许一次一个事务操作,只要提交完才能下一个事务操作

注意

隔离性越高,性能越差

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

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

相关文章

前端| 富文本显示不全的解决方法

背景 前置条件:编辑器wangEditor vue项目 在pc端进行了富文本操作, 将word内容复制到编辑器中, 进行发布, pc端正常, 在手机端展示的时候 显示不全 分析 根据h5端编辑器内容的数据展示, 看到有一些样式造…

基于RKNN的YOLOv5安卓Demo

1.简介 基于RKNPU2 SDK 1.6.0版的安卓YOLOv5演示应用程序,选择图片进行对象检测并显示识别结果。 GitHub源码地址:https://github.com/shiyinghan/rknn-android-yolov5 2.实现过程 参考RKNN官方库RKNN Model Zoo提供的YOLOv5对象检测demo&#xff0c…

【Web】CTFSHOW-2023CISCN国赛初赛刷题记录(全)

目录 Unzip BackendService go_session deserbug 主打一个精简 Unzip 进来先是一个文件上传界面 右键查看源码,actionupload.php 直接访问/upload.php,看到后端的源码 就是上传一个压缩包,对其进行解包处理 因为其是在/tmp下执行…

C++ | Leetcode C++题解之第16题最接近的三数之和

题目&#xff1a; 题解&#xff1a; class Solution { public:int threeSumClosest(vector<int>& nums, int target) {sort(nums.begin(), nums.end());int n nums.size();int best 1e7;// 根据差值的绝对值来更新答案auto update [&](int cur) {if (abs(cur…

Qt 中的项目文件解析和命名规范

&#x1f40c;博主主页&#xff1a;&#x1f40c;​倔强的大蜗牛&#x1f40c;​ &#x1f4da;专栏分类&#xff1a;QT❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、Qt项目文件解析 1、.pro 文件解析 2、widget.h 文件解析 3、main.cpp 文件解析 4、widget.cpp…

Redis: 持久化

文章目录 一、RDB持久化1、概念2、生成、载入RDB文件3、执行时机&#xff08;1&#xff09; 执行save命令&#xff08;2&#xff09;执行bgsave命令&#xff08;3&#xff09;Redis停机时&#xff08;4&#xff09;触发RDB条件 4、bgsave原理5、小结 二、AOF持久化1、概念2、AO…

element vue 日期时间组件封装

一、背景 年、月、周、日的时间范围类型&#xff0c;选择对应的日期类型&#xff0c;会传参给后端一个dateType参数&#xff0c;用于后端判断&#xff0c;进行数据抽稀。 二、实现效果 三、代码 完整代码&#xff1a; //年月周日&#xff0c;组件封装 //vue3 setup <scrip…

JAVA毕业设计134—基于Java+Springboot+Vue的社区医院管理系统(源代码+数据库+万字论文)

毕设所有选题&#xff1a; https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootVue的社区医院管理系统(源代码数据库万字论文)134 一、系统介绍 本项目前后端分离&#xff0c;分为管理员、用户、医生、前台四种角色 1、用户&#xff1a; 注…

边缘计算采集网关如何助力制造企业解决数采问题-天拓四方

一、企业背景 某大型制造企业&#xff0c;位于国内某经济发达的工业园区内&#xff0c;拥有多个生产线和智能化设备&#xff0c;致力于提高生产效率、降低运营成本。随着企业规模的扩大和生产自动化的推进&#xff0c;该企业面临着海量数据处理、实时响应和网络安全等多重挑战…

Prompt最佳实践|大模型也喜欢角色扮演?

在OpenAI的官方文档中已经提供了Prompt Enginerring的最佳实践&#xff0c;目的就是帮助用户更好的使用ChatGPT 编写优秀的提示词我一共总结了9个分类&#xff0c;本文讲解第2个分类&#xff1a;要求模型扮演角色 提供更多的细节要求模型扮演角色使用分隔符指定任务步骤提供样…

Java Web这一路走来

大部分Java应用都是Web或网络应用&#xff0c;MVC框架在Java框架中有着举足轻重的地位&#xff0c;一开始的Web应用并不现在这样子的&#xff0c;一步一步走来&#xff0c;每一步都经历了无数的血和泪的教训&#xff0c;以史为镜可以知兴替。 1. 草莽时代 早期的Java服务端技…

Cortex-M4架构

第一章 嵌入式系统概论 1.1 嵌入式系统概念 用于控制、监视或者辅助操作机器和设备的装置&#xff0c;是一种专用计算机系统。 更宽泛的定义&#xff1a;是在产品内部&#xff0c;具有特定功能的计算机系统。 1.2 嵌入式系统组成 硬件 ①处理器&#xff1a;CPU ②存储器…