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

mysl数据库(八)事务、三种读现象

事务、三种读现象

文章目录

  • 事务、三种读现象
  • 一、事务介绍
  • 二、事务的使用
  • 三、三种读现象

一、事务介绍

事务是mysql的一种机制,一个事务里可以包含多条sql语句。执行事务相当于拍了一张快照,在事务执行完提交以前可以回滚至最初的状态,当然事务中也有保存点,可以将事务回滚至保存点处。

事务有4大特性:

  • 原子性:指事务内部的sql语句是一个整体,有一条运行失败,其他的sql语句也会运行失败。
  • 一致性:指事务执行前后状态要保持一致。例如转账前后,转入方和转出方的总金额保持不变。
  • 隔离性:多个事务并发运行彼此之间互不影响。
  • 持久性:事务提交以后对数据库中数据的改变是持久的,即使数据库故障也不会对其有影响。

二、事务的使用

在mysql中每条sql语句都会开启一个事务,并且语句结束以后都会自动提交事务,这种方式被称为隐式开启隐式提交。
如果想要显式开启事务可以使用start transaction或者begin,之后事务就不会自动提交了,想要提交事务可以使用commit。rollback可以回滚事务,但需要注意commit或者rollback后事务都会结束。
除了上面说到的隐式开启隐式提交、显式开启显式提交外mysql还有一种开启事务的方式:隐式开启显式提交。可以使用set session autocommit=0关闭事务的自动提交。

#下方代码中使用的表t2如下所示
+----+--------+------+
| id | name   | age  |
+----+--------+------+
|  1 | 张三   |   20 |
|  2 | 李四   |   30 |
+----+--------+------+#首先开启开个事务
#事务一
begin;
#事务二
begin;
#事务一
update t2 set age=age+1 where name='张三';
select * from t2;
#可以看到张三的age变成了21
+----+--------+------+
| id | name   | age  |
+----+--------+------+
|  1 | 张三   |   21 |
|  2 | 李四   |   30 |
+----+--------+------+#事务二
select * from t2;
+----+--------+------+
| id | name   | age  |
+----+--------+------+
|  1 | 张三   |   20 |
|  2 | 李四   |   30 |
+----+--------+------+
#事务二中张三的age依然是20,这是因为事务二中查询语句查询的是事务开启时的快照
#事务一中张三age改变不会影响事务二快照的数据
#此时事务一还没有提交,如果事务二也对张三的age进行修改会出现死锁现象,这个放到以后讨论#事务一
commit;#事务二
select * from t2;
+----+--------+------+
| id | name   | age  |
+----+--------+------+
|  1 | 张三   |   20 |
|  2 | 李四   |   30 |
+----+--------+------+
#即使事务一提交了,事务二查询的结果依然是20,这也证明了事务二是从快照中查询数据的结论
update t2 set age=age+1 where name='张三';
select * from t2;
+----+--------+------+
| id | name   | age  |
+----+--------+------+
|  1 | 张三   |   22 |
|  2 | 李四   |   30 |
+----+--------+------+
#事务二也将张三age+1以后查询结果是22,因为事务二修改数据不是在快照基础上,而是在真实数据基础上
#因为此前事务一已经修改过age并且提交了,此时真实数据是21,因此事务二修改以后的结果是22
commit;

在pymysql模块中执行sql语句默认会开启sql,并且这个事务需要我们手动取提交,因此pymysql中增删改数据以后必须执行commit函数,并且当sql语句发送异常时pymysql模块会自动进行回滚操作取消之前所有的sql语句。

三、三种读现象

读现象本质是数据库在高并发场景下,多个同时执行的事务带来的问题。常见的三种读现象如下:

  • 脏读:事务一二并发执行,事务一改了数据,事务二读取数据,事务一回滚数据导致事务二读取的数据有误。
  • 不可重复读:事务一二并发执行,事务一读取数据,事务二改了数据并提交数据,事务一再次读取数据发现读取的数据与前一次的不同。
  • 幻读:这是不可重复读的一种特殊情况,事务一二并发执行,事务一查询数据,事务二在极短时间内插入数据使得事务一再以后的查询中会发现有几列数据是之前查询时没有的。

上述的问题本质都是事务高并发情况下导致的,为了解决这些问题必须得处理好事务之间的隔离性,事务的隔离性可以分为四个级别:
在这里插入图片描述

事务隔离机制等级由上往下依次升高,但是并发效率由上往下以此递减。mysql默认的是rr机制,这种机制解决了脏读、不可重复读的问题,而幻读问题需要依靠mysql的另一种机制解决,而django中采用的事务隔离机制是rc机制。

相关文章:

mysl数据库(八)事务、三种读现象

事务、三种读现象 文章目录 事务、三种读现象一、事务介绍二、事务的使用三、三种读现象 一、事务介绍 事务是mysql的一种机制,一个事务里可以包含多条sql语句。执行事务相当于拍了一张快照,在事务执行完提交以前可以回滚至最初的状态,当然事…...

【DVWA】File Inclusion文件包含实战

安能有术无道有道无心&#xff0c;乐得仁心仁义正心行道。 1.File Inclusion(Low) 相关代码分析 <?php// The page we wish to display $file $_GET[ page ];?>可以看到&#xff0c;服务器端对page参数没有做任何的过滤跟检查。 服务器期望用户的操作是点击下面的…...

(免费送源码)计算机毕业设计原创定制:Java+ssm+JSP+Ajax SSM棕榈校园论坛的开发

摘要 随着计算机科学技术的高速发展,计算机成了人们日常生活的必需品&#xff0c;从而也带动了一系列与此相关产业&#xff0c;是人们的生活发生了翻天覆地的变化&#xff0c;而网络化的出现也在改变着人们传统的生活方式&#xff0c;包括工作&#xff0c;学习&#xff0c;社交…...

异常处理(4)throws

异常处理&#xff08;4&#xff09; throws 前言&#xff1a;运行时异常&#xff08;RuntimeException&#xff09;或它的子类可以不做处理&#xff0c;因为这类异常很普遍&#xff0c;若全部处理&#xff0c;可能会对程序的可读性和运行效率产生影响。此外&#xff0c;即使不使…...

点云欧式聚类,条件欧式聚类算法原理及推导

点云欧式聚类算法数学推导 点云欧式聚类&#xff08;Euclidean Clustering for Point Clouds&#xff09;是点云处理中常用的一种无监督聚类方法。它基于欧式距离将点云中的点划分为多个簇&#xff0c;常用于分割、目标检测等任务。以下是算法的数学推导和实现原理。 问题定义…...

每日十题八股-2024年11月27日

1.类型互转会出现什么问题吗&#xff1f; 2.为什么用bigDecimal 不用double &#xff1f; 3.装箱和拆箱是什么&#xff1f; 4.Java为什么要有Integer&#xff1f; 5.Integer相比int有什么优点&#xff1f; 6.那为什么还要保留int类型&#xff1f; 7.说一下 integer的缓存 8.怎么…...

C++虚函数面试题及参考答案

什么是虚函数&#xff1f;它的作用是什么&#xff1f; 虚函数是在基类中使用关键字 virtual 声明的成员函数。当在派生类中重写&#xff08;override&#xff09;这个函数时&#xff0c;会根据对象的实际类型来调用相应的函数版本&#xff0c;而不是仅仅根据指针或引用的类型来…...

如何搭建C++环境--1.下载安装并调试Microsoft Visual Studio Previerw(Windows)

1.首先&#xff0c;打开浏览器 首先&#xff0c;搜索“Microsoft Visual Studio Previerw” 安装 1.运行VisualStudioSetup (1).exe 无脑一直点继续 然后就到 选择需要的语言 我一般python用pycharm Java&#xff0c;HTML用vscode&#xff08;Microsoft Visual Studio cod…...

大数据新视界 -- Hive 函数应用:复杂数据转换的实战案例(下)(12/ 30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...

深入理解 TypeScript:联合类型与交叉类型的应用

在 TypeScript 的世界里&#xff0c;类型系统是核心特性之一&#xff0c;它提供了强大的工具来帮助开发者编写更安全、更可靠的代码。今天&#xff0c;我们将深入探讨 TypeScript 中的两个高级类型特性&#xff1a;联合类型&#xff08;Union Types&#xff09;和交叉类型&…...

fiddler抓包工具与requests库构建自动化报告

一. Fiddler 抓包工具 1.1 Fiddler 工具介绍和安装 Fiddler 是一款功能强大的 HTTP 调试代理工具&#xff0c;能够全面记录并深入检查您的计算机与互联网之间的 HTTP 和 HTTPS 通信数据。其主界面布局清晰&#xff0c;主要包含菜单栏、工具栏、树形标签栏和内容栏。 1.2 Fid…...

数据结构——排序算法第二幕(交换排序:冒泡排序、快速排序(三种版本) 归并排序:归并排序(分治))超详细!!!!

文章目录 前言一、交换排序1.1 冒泡排序1.2 快速排序1.2.1 hoare版本 快排1.2.2 挖坑法 快排1.2.3 lomuto前后指针 快排 二、归并排序总结 前言 继上篇学习了排序的前面两个部分:直接插入排序和选择排序 今天我们来学习排序中常用的交换排序以及非常稳定的归并排序 快排可是有多…...

Vue-常用指令

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Vue篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来Vue篇专栏内容:Vue-常用指令 目录 1.1 v-cloak 1.2 双向数据绑定指令 v-model 1.3 v-once 1.4 绑定属性 v-bind…...

守护进程

目录 守护进程 前台进程 后台进程 session&#xff08;进程会话&#xff09; 前台任务和后台任务比较好 本质 绘画和终端都关掉了&#xff0c;那些任务仍然在 bash也退了&#xff0c;然后就托孤了 ​编辑 守护进程化---不想受到任何用户登陆和注销的影响​编辑 如何…...

GPON原理

GPON网络架构 对于OLT来说&#xff0c;它就相当于一个指挥官&#xff0c;它指挥PON口下的ONU在指定的时间段内发送数据以及发起测距过程等 而ONU则是一个士兵&#xff0c;按照OLT的指挥做出相应 而ODN它主要就是提供一个传输通道&#xff0c;主要包括分光器和光纤组成 对于PO…...

华三(HCL)和华为(eNSP)模拟器共存安装手册

接上章叙述&#xff0c;解决同一台PC上同时部署华三(HCL)和华为(eNSP&#xff09;模拟器。原因就是华三HCL 的老版本如v2及以下使用VirtualBox v5版本&#xff0c;可以直接和eNSP兼容Oracle VirtualBox&#xff0c;而其他版本均使用Oracle VirtualBox v6以上的版本&#xff0c;…...

类和对象--中--初始化列表(重要)、隐式类型转化(理解)、最后两个默认成员函数

1.初始化列表 1.1作用&#xff1a; 通过特定的值&#xff0c;来初始化对象。 1.2定义&#xff1a; 初始化列表&#xff0c;就相当于定义对象&#xff08;开空间&#xff09;。不管写不写初始化列表&#xff0c;每个成员变量都会走一遍初始化列表&#xff08;开出对应的空间…...

clickhouse 使用global in 优化 in查询

文章目录 in例子使用global in in例子 SELECT uniq(UserID) FROM distributed_table WHERE CounterID 101500 AND UserID IN (SELECT UserID FROM distributed_table WHERE CounterID 34)对于in 查询来说&#xff0c;本来查询的就是分布式表&#xff0c;假设这个表有100 个…...

macos 14.0 Monoma 修改顶部菜单栏颜色

macos 14.0 设置暗色后顶部菜单栏还维持浅色&#xff0c;与整体不协调。 修改方式如下&#xff1a;...

鸿蒙动画开发07——粒子动画

1、概 述 粒子动画是在一定范围内随机生成的大量粒子产生运动而组成的动画。 动画元素是一个个粒子&#xff0c;这些粒子可以是圆点、图片。我们可以通过对粒子在颜色、透明度、大小、速度、加速度、自旋角度等维度变化做动画&#xff0c;来营造一种氛围感&#xff0c;比如下…...

Matlab 2016b安装教程附安装包下载

软件介绍 MATLAB&#xff08;矩阵实验室&#xff09;是MathWorks公司推出的用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境的商业数学软件。MATLAB具有数值分析、数值和符号计算、工程与科学绘图、控制系统的设计与仿真、数字图像处理、数字信…...

Container image .... already present on machine 故障排除

故障现象&#xff1a; Normal Pulled 12s (x2 over 15s) kubelet Container image “registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1” already present on machine kubectl get pods NAME READY STATUS RESTARTS AGE two-pod 1/2 Error …...

力扣 二叉树的层序遍历-102

二叉树的层序遍历-102 class Solution { public:vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>> res; // 二维数组用来存储每层节点if (root nullptr)return res;queue<TreeNode*> q; // 队列用来进行层序遍历q.push(r…...

Java 平衡二叉树 判断 详解

判断平衡二叉树的详解&#xff08;Java 实现&#xff09; 平衡二叉树的定义&#xff1a; 平衡二叉树&#xff08;Balanced Binary Tree&#xff09;是指一棵二叉树中任意节点的左右子树高度差不超过 1。即&#xff1a; ∣ h e i g h t ( l e f t ) − h e i g h t ( r i g h …...

Java设计模式笔记(一)

Java设计模式笔记&#xff08;一&#xff09; &#xff08;23种设计模式由于篇幅较大分为两篇展示&#xff09; 一、设计模式介绍 1、设计模式的目的 让程序具有更好的&#xff1a; 代码重用性可读性可扩展性可靠性高内聚&#xff0c;低耦合 2、设计模式的七大原则 单一职…...

【人工智能学习之yolov8改进的网络怎么指定规模】

yolov8改进的网络怎么指定规模 在你更换主干网络或者做了其他修改之后&#xff0c;发现模型总是默认使用的n规模&#xff0c;而n规模有可能无法完成任务&#xff0c;怎么办呢&#xff0c;有什么办法指定规模大小呢&#xff1f; WARNING ⚠️ no model scale passed. Assuming …...

网络安全概述

网络安全 物理安全 网络的物理安全是整个网络系统安全的前提。在 校园网工程建设中&#xff0c;由于网络系统属于 弱电工程&#xff0c;耐压值很低。因此&#xff0c;在 网络工程的设计和施工中&#xff0c;必须优先考虑保护人和 网络设备不受电、火灾和雷击的侵害&#xff1…...

[MySQL#2] 库 | 表 | 详解CRUD命令 | 字符集 | 校验规则

目录 一. 库操作 1. 创建数据库 2. 字符集和校验规则 校验规则对数据库的影响 显示创建数据库时对应的命令 3. 修改数据库 4. 数据库删除 备份和恢复 还原 查看连接情况 二. 表操作 1. 创建表&#xff08;定义实例化格式 2. 创建表案例 &#xff08;实例化数据类型…...

【Unity基础】如何查看当前项目使用的渲染管线?

在 Unity 中&#xff0c;你可以通过以下几种方式查看当前项目使用的是哪个渲染管线&#xff1a; 1. 检查 Graphics Settings 打开 Unity 编辑器&#xff0c;进入顶部菜单&#xff1a;Edit → Project Settings → Graphics。在 Graphics Settings 窗口中&#xff0c;找到 Scr…...

什么是域名监控?

域名监控是持续跟踪全球域名系统&#xff08;DNS&#xff09;中变化以发现恶意活动迹象的过程。组织可以对其拥有的域名进行监控&#xff0c;以判断是否有威胁行为者试图入侵其网络。他们还可以对客户的域名使用这种技术以执行类似的检查。 你可以将域名监控比作跟踪与自己实物…...

apache中的Worker 和 Prefork 之间的区别是什么?

文章目录 内存使用稳定性兼容性适用场景 Apache中的Worker和Prefork两种工作模式在内存使用、稳定性以及兼容性等方面存在区别 内存使用 Worker&#xff1a;由于使用线程&#xff0c;内存占用较少。Prefork&#xff1a;每个进程独立运行&#xff0c;内存消耗较大。 稳定性 W…...

解决SSL VPN客户端一直提示无法连接服务器的问题

近期服务器更新VPN后&#xff0c;我的win10电脑一致无法连接到VPN服务器&#xff0c; SSL VPN客户端总是提示无法连接到服务端。网上百度尝试了各种方法后&#xff0c;终于通过以下设置方式解决了问题&#xff1a; 1、首先&#xff0c;在控制面板中打开“网络和共享中心”窗口&…...

网络基础概念

1.网络协议 网络协议是一组标准和规则&#xff0c;用于定义电子设备如何在网络上通信。这些规则涵盖了数据如何格式化&#xff0c;传输&#xff0c;路由以及接收。网络协议确保了不同制造商的设备能够相互理解和交换数据 协议分层 协议也是软件&#xff0c;在设计上为了更好…...

sunshine和moonlight串流网络丢失帧高的问题(局域网)

注&#xff1a;此贴结果仅供参考 场景环境&#xff1a;单身公寓 路由器&#xff1a;2016年的路由器 开始&#xff1a;电脑安装sunshine软件&#xff0c;手机安装moonlight软件开始串流发现网络丢失帧发现巨高 一开始怀疑就是路由器问题&#xff0c;因为是局域网&#xff0c;而…...

远程视频验证如何改变商业安全

如今&#xff0c;商业企业面临着无数的安全挑战。尽管企业的形态和规模各不相同——从餐厅、店面和办公楼到工业地产和购物中心——但诸如入室盗窃、盗窃、破坏和人身攻击等威胁让安全主管时刻保持警惕。 虽然传统的监控摄像头网络帮助组织扩大了其态势感知能力&#xff0c;但…...

CTO 实际上是做什么的?

https://vadimkravcenko.com/shorts/what-cto-does/ 有刪節 本文旨在为软件工程师解密CTO的角色&#xff0c;并为那些渴望担任这一职位的人提供路线图。 “他们是技术团队与公司其他部门之间的桥梁&#xff0c;确保技术支持并推动业务发展。” CTO的角色经常被误解。CTO有时是…...

【软考速通笔记】系统架构设计师④——系统工程基础知识

文章目录 一、前言二、系统工程方法2.1 霍尔的三维结构2.2 切克兰德法2.3 并行工程2.4 综合集成法 三、系统工程生命周期四、系统生命周期方法五、系统性能5.1 计算机的性能指标5.2 路由器的性能指标5.3 交换机的性能指标5.4 网络的性能资料5.5 操作系统的性能指标5.6 数据库的…...

2024赣ctf-web -wp

1.你到底多想要flag??? 首先来解决第一关&#xff1a; 先了解一下stripos&#xff08;&#xff09;&#xff1b; 并且此函数处理数组返回false。而且pre_match同样遇见数组是返回false&#xff08;解释一下正则 i&#xff1a;这是正则表达式的修饰符&#xff0c;代表“不区…...

Android Framework AudioFlinge 面试题及参考答案

目录 请解释什么是 AudioFlinger? AudioFlinger 在 Android 系统中的位置是什么? AudioFlinger 的主要职责有哪些? AudioFlinger 如何管理音频流? 在 AudioFlinger 中,什么是音频会话? 请简述 AudioFlinger 的工作流程。 AudioFlinger 是如何与硬件交互的? 在 A…...

英语知识在线平台:Spring Boot技术应用

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…...

Qt5.14.2的安装与环境变量及一些依赖库的配置

目录 1.Qt5.14.2安装 2.Qt环境变量及一些依赖库的配置 1.Qt5.14.2安装 QT从入门到入土&#xff08;一&#xff09;——Qt5.14.2安装教程和VS2019环境配置 - 唯有自己强大 - 博客园 2.Qt环境变量及一些依赖库的配置 假设QT安装目录为: D:\Qt\Qt5.14.2 将目录: D:\Qt\Qt5.14.…...

2024年9月中国电子学会青少年软件编程(Python)等级考试试卷(六级)答案 + 解析

一、单选题 1、下面代码运行后出现的图像是&#xff1f;&#xff08; &#xff09; import matplotlib.pyplot as plt import numpy as np x np.array([A, B, C, D]) y np.array([30, 25, 15, 35]) plt.bar(x, y) plt.show() A. B. C. D. 正确答案&#xff1a;A 答案…...

go编程中yaml的inline应用

下列代码&#xff0c;设计 Config 和 MyConfig 是为可扩展 Config&#xff0c;同时 Config 作为公共部分可保持变化。采用了匿名的内嵌结构体&#xff0c;但又不希望 yaml 结果多出一层。如果 MyConfig 中的 Config 没有使用“yaml:",inline"”修饰&#xff0c;则读取…...

Springboot自带注解@Scheduled实现定时任务

基于Scheduled注解实现简单定时任务 原理 Spring Boot 提供了Scheduled注解&#xff0c;通过在方法上添加此注解&#xff0c;可以方便地将方法配置为定时任务。在应用启动时&#xff0c;Spring 会自动扫描带有Scheduled注解的方法&#xff0c;并根据注解中的参数来确定任务的…...

VSCode【下载】【安装】【汉化】【配置C++环境(超快)】(Windows环境)

目录 一、VSCode 下载 & 安装 二、VSCode 汉化 三、VSCode C配置 配置环境变量 如何验证是否成功 接着在VSCode中配置​编辑 一、VSCode 下载 & 安装 VSCode 下载 & 安装-CSDN博客https://blog.csdn.net/applelin2012/article/details/144009210Download Visual St…...

【八股文】小米

文章目录 一、vector 和 list 的区别&#xff1f;二、include 双引号和尖括号的区别&#xff1f;三、set 的底层数据结构&#xff1f;四、set 和 multiset 的区别&#xff1f;五、map 和 unordered_map 的区别&#xff1f;六、虚函数和纯虚函数的区别&#xff1f;七、extern C …...

ABAP OOALV模板

自用模板&#xff0c;可能存在问题 一、主程序 *&---------------------------------------------------------------------* *& Report ZVIA_OO_ALV *&---------------------------------------------------------------------* REPORT ZVIA_OO_ALV.INCLUDE ZVI…...

qt QDateTime详解

1. 概述 QDateTime 是 Qt 框架中用于处理日期和时间的类。它将 QDate 和 QTime 组合在一起&#xff0c;提供了日期时间的统一处理方案。QDateTime 可以精确到毫秒&#xff0c;并支持时区处理。 2. 重要方法 构造函数: QDateTime() 构造无效的日期时间 QDateTime(const QDa…...

鸿蒙安全控件之位置控件简介

位置控件使用直观且易懂的通用标识&#xff0c;让用户明确地知道这是一个获取位置信息的按钮。这满足了授权场景需要匹配用户真实意图的需求。只有当用户主观愿意&#xff0c;并且明确了解使用场景后点击位置控件&#xff0c;应用才会获得临时的授权&#xff0c;获取位置信息并…...

决策树分类算法【sklearn/决策树分裂指标/鸢尾花分类实战】

决策树分类算法 1. 什么是决策树&#xff1f;2. DecisionTreeClassifier的使用&#xff08;sklearn&#xff09;2.1 算例介绍2.2 构建决策树并实现可视化 3. 决策树分裂指标3.1 信息熵&#xff08;ID3&#xff09;3.2 信息增益3.3 基尼指数&#xff08;CART&#xff09; 4. 代码…...