[MySQL] 事务管理(一) 事务的基本概念
1.为什么需要事务
1.1 CURD不加控制会有什么问题
我认为要解决上面的问题,CURD必须要有以下的属性
买票的过程必须是原子的
买票相互之间不可以收到影响
买完票需要永久有效
买前,买后的状态必须是确定的
2. 什么是事务?
事务就是一组DML语句组成,这些语句在逻辑上存在相关性,这一组DML语句要么全部成功,要么全部失败,是一个整体。MySQL提供一种机制,保证我们达到这样的效果。事务还规定不同的客户端看到的数据是不相同的。
现在看概念我认为事务就是一组的SQL语句
2.1 事务的属性(ACID)
- 原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成
- 一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏
- 隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(ReadS uncommitted )、读提交(readcommitted)、可重复读(erializable )repeatableread)和串行化
- 持久性:事务处理结束后,对数据的修改就是永久的
3.为什么会出现事务?
本质上就是MySQL是为了简化我们的操作而产生的,那么当数据出现我们上面说的问题的时候,难道需要我们程序员去维护他们的属性吗?所以MySQL就出现了事务来帮助程序员,让我们不需要手动的管理。
4.事务的版本支持
在MySQL中只有innodb数据库引擎才支持事务,MyISAM不支持
查看数据库引擎的操作:
show engines \G
5.事务的提交方式
- 自动提交
- 手动提交
5.1 查看事务的提交方式
show variables like 'autocommit';
5.2 更改事务的提交方式
set autocommit=0;禁止自动提交
set autocommit=1;//设置自动提交
6. 事务常见操作
为了便于演示,我们将mysql的默认隔离级别设置成读未提交。
6.1 事务的开始与回滚
启动事务:两种都可以
begin;
start transaction;
创建一个保存点
savepoint save1
回滚
rollback save1;
演示:
mysql> create table if not exists account(-> id int primary key, -> name varchar(50) not null default '', -> blance decimal(10,2) not null default 0.0-> )ENGINE=InnoDB DEFAULT CHARSET=UTF8;
Query OK, 0 rows affected (0.01 sec)
插入数据的时候,在右侧即可查询到,但是我们回滚之后就一条记录也没有了;
注意:如果没有记录rollback点,输入回滚,会直接清除所有的事务操作
有几个客户端崩溃的场景就不演示了直接结论:
- 隔离级别为读为提交的时候,客户端崩溃,没有commit,MySQL会自动回滚到最开始
- 客户端崩溃,有commit,MySQL的数据不会受到影响,已经持久化了。
结论
- 只要输入begin,事务必须通过commit提交,才会形成持久化,与设置是否提交没有关系
- 事务可以手动回滚,当事务异常退出MySQL会自动回滚
- 对于InnoDB 每一条SQL 语言都默认封装成事务,自动提交。
7.事务隔离级别
7.1 理解隔离级别
数据库中,为了保证事务执行过程中尽量不受干扰,就有了隔离性,但是为了完成不同的情况下的任务,mysql允许事务收到不同程度的干扰,这就出现了隔离级别。
7.2 隔离级别
- 读未提交 Read Uncommitted:所有的事务都可以看到别的没有提交的事务的执行,等同于没有隔离性。他会出现很多的并发问题:脏读,幻读,不可重复读的问题。
- 读提交 【Read Committed:一个事务只能看到别的事务提交之后的结果,但是他也是有问题的:会引起不可重复读,即一个事务执行时,如果多次 select, 可能得到不同的结果。
- 可重复读 Repeatable Read:*这是MySQL的默认隔离级别,他保证同一个事务在读取时,会看到同样的数据,*同样他的问题是:幻读
- 串行化 Serializable:这是事务的最高隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决了幻读的问题。它在每个读的数据行上面加上共享锁。(这种级别过于极端,一般很少使用)
7.3 查看与设置隔离性
我们先来熟悉更改查看隔离性的操作,然后再继续理解隔离级别
7.3.1 查看全局隔离级别和会话隔离级别
select @@global.tx_isolation;
select @@session.tx_isolation;
select @@tx.isolation;
7.3.2设置全局隔离级别和会话隔离级别
这里设置会话的隔离性不会影响全局的隔离属性;
设置全局的隔离性会影响会话的隔离性。
注意:一般我们设置完隔离性之后都要重新启动客户端
7.4 读未提交(Read Uncommitted)
前提:启动两个终端,一个进行CURD,另一个负责读取,把隔离性设置为读未提交。
读到终端A更新但是未commit的数据。
这里就是脏读:一个事务在执行中,读取到正在执行中的事务更新但是并没有提交的数据,
7.5 读提交 【Read Committed】
切换到读提交
当我们启动事务之后,更新了张三的blance之后,查看表,发现数据并没有改变,但是当我们提交之后,数据就被改变了。
也就说:同样的读取,在不同时间段中,读取到的内容不同,这种现象就叫做(不可重复读)
那么这是问题吗?
这是有问题的,一个事务读取的数据,一定要是最新的值吗?这是根据实际情况来决定的。
举个例子:
我们是大三的学生,那么我们的学长学姐的找工作情况,我们一般都是可以知道的(学校发出来给做参考),但是我们学长学姐一般情况下他们不会知道我们的就业情况,
7.6 可重复读【Repeatable Read】
可以看到,在A事务更新之后,未提交,事务B中看不到更新的信息。 在A提交之后,还是看不到更新的信息,
只有当B事务也提交之后才能看到相应的更新结果。这就是可重复读
如果是inset操作呢?
在我的机器上,现象和update一样,但是,一般的数据库在可重复读情况的时候,无法屏蔽其他事务insert的数据(因为隔离性实现是对数据加锁完成的,而insert待插入的数据因为并不存在,那么一般加锁无法屏蔽这类问题)会造成虽然大部分内容是可重复读的,但是insert的数据在可重复读情况被读取出来,导致多次查找时,会多查找出来新的记录,就如同产生了幻觉。这种现象,叫做幻读(phantom
read)。很明显,MySQL在RR级别的时候,是解决了幻读问题的
7.7 串行化【serializable】
对所有操作全部加锁,进行串行化,不会有问题,但是只要串行化,效率很低,几乎完全不会被采用
A在执行更新的时候,没有提交,这个时候B端就会被堵塞,直到A端口进行提交,B才会执行结果。
7.8 隔离级别总结
7.9 一致性
- 事务的执行结果,必须使数据库从一个一致状态,改变到另一个一致性的状态。当事务成功提交,数据库处于一致性的状态,但是当事务没有提交被迫中断时,未完成的事务对数据库的修改已经被填入到数据库中,这个时候数据库就处于一种不一致的状态,所以事务的一致性是由原子性来保证的。
- 其实一致性和用户的业务逻辑强相关,一般MySQL提供技术支持,但是一致性还是要用户业务逻辑做支撑,也就是,一致性,是由用户决定的。
- 而技术上,通过AID保证C
相关文章:
[MySQL] 事务管理(一) 事务的基本概念
1.为什么需要事务 1.1 CURD不加控制会有什么问题 我认为要解决上面的问题,CURD必须要有以下的属性 买票的过程必须是原子的 买票相互之间不可以收到影响 买完票需要永久有效 买前,买后的状态必须是确定的 2. 什么是事务? 事务就是一组DML语…...
rk3588 驱动开发(一)字符设备开发
3.字符设备驱动开发 3.1 什么是字符设备驱动 字符设备:就是一个个字节,按照字节流进行读写操作的设备,读写是按照先后顺序的。 举例子:IIC 按键 LED SPI LCD 等 Linux 应用程序调用驱动程序流程: Linux中驱动加载成功…...
【第45节】windows程序的其他反调试手段上篇
目录 引言 一、通过窗口类名和窗口名判断 二、检测调试器进程 三、父进程是否是Explorer 四、RDTSC/GetTickCount时间敏感程序段 五、StartupInfo结构的使用 六、使用BeingDebugged字段 七、 PEB.NtGlobalFlag,Heap.HeapFlags,Heap.ForceFlags 八、DebugPort:CheckRem…...
通过人类和机器人演示进行联合逆向和正向动力学的机器人训练
25年3月来自哥伦比亚大学的论文“Train Robots in a JIF: Joint Inverse and Forward Dynamics with Human and Robot Demonstrations”。 在大型机器人演示数据集上进行预训练是学习各种操作技能的强大技术,但通常受到收集以机器人为中心数据的高成本和复杂性限制…...
云渗透三(对象存储攻防)
对象存储是什么? 对象存储(Cloud Object Storage,COS)是腾讯云提供的⼀种存储海量⽂件的分布式存储服务,⽤户可通过⽹络随时存储和查看数据。腾讯云 COS 使所有⽤户都能使⽤具备⾼扩展性、低成本、可靠和安全的数据存储服务。 COS 通过控制台、API、SDK 和⼯具等多样化⽅…...
ShenNiusModularity项目源码学习(17:ShenNius.Admin.Mvc项目分析-2)
ShenNiusModularity项目的后台管理主页面如下图所示,该页面为ShenNius.Admin.Mvc项目的Views\Home\Index.cshtml,使用的是layuimini后台模板(参考文献2),在layuimini的GitHub主页中提供有不同样式的页面模版链接&#…...
Sentinel源码—2.Context和处理链的初始化一
大纲 1.Sentinel底层的核心概念 2.Sentinel中Context的设计思想与源码实现 3.Java SPI机制的引入 4.Java SPI机制在Sentinel处理链中的应用 5.Sentinel默认处理链ProcessorSlot的构建 1.Sentinel底层的核心概念 (1)资源和规则 (2)Context (3)ProcessorSlot (4)Node (1…...
嵌入式C语言高级编程:OOP封装、TDD测试与防御性编程实践
一、面向对象编程(OOP) 尽管 C 语言并非面向对象编程语言,但借助一些编程技巧,也能实现面向对象编程(OOP)的核心特性,如封装、继承和多态。 1.1 封装 封装是把数据和操作数据的函数捆绑在一起,对外部隐藏…...
C++中unique_lock和lock_guard区别
目录 1.自动锁定与解锁机制 2.灵活性 3.所有权转移 4.可与条件变量配合使用 5.性能开销 在 C 中,std::unique_lock 和 std::lock_guard 都属于标准库 <mutex> 中的互斥锁管理工具,用于简化互斥锁的使用并确保线程安全。但它们存在一些显著区别…...
C# 使用.NET内置的 IObservable<T> 和 IObserver<T>-观察者模式
核心概念 IObservable<T> 表示 可观察的数据源(如事件流、实时数据)。 关键方法:Subscribe(IObserver<T> observer),用于注册观察者。 IObserver<T> 表示 数据的接收者,响应数据变化。 三个核心…...
多模态大模型文字识别 vs OCR识别模型
论文简述 多模态大语言模型(Multimodal Large Language Models,简称多模态LLMs)具有高度通用性,能够处理图像描述、文档分析和自动化内容生成等多种任务。这种广泛的适用性使其在不同工业领域都受到了大量关注。 在OCR方面,多模态LLMs的表现超过了专门为OCR设计的模型。这…...
[区块链] 持久化运行区块链 | 并通过HTTP访问
实验目标 以Web服务的形式持久化运行区块链,并通过HTTP接口的形式实现对区块链的操作。 实验内容 构建区块链的区块对象和区块链对象。使用Flask等Web服务框架运行持久化的进程,实现基于HTTP接口实现新区块的添加功能以及传递区块索引查询区块链中的区…...
批量将不同位置的多个文件复制到一个文件夹
在日常工作中,我们常常需要将多个位置的文件集中到一个文件夹中。手动一个个复制文件既费时又容易出错。使用批量文件复制工具,您可以轻松将不同位置的多个文件快速复制到一个文件夹中,大大提高工作效率。 今天给大家介绍一下批量将不同位置的…...
CentOS 下 Zookeeper 常用命令与完整命令列表
一、服务管理命令 常用服务命令 启动 Zookeeper 服务: systemctl start zookeeper # 使用 systemd (推荐) /usr/local/zookeeper/bin/zkServer.sh start # 直接启动 停止服务: systemctl stop zookeeper /usr/local/zookeeper/bin/zkServer.sh stop 查看服务状态…...
React与Vue:哪个框架更适合入门?
React与Vue:选择哪个框架入门? 一、框架定位与发展趋势 1.1 技术背景对比 React:Meta(原Facebook)2013年推出,采用声明式编程范式,专注构建用户界面Vue:尤雨溪2014年推出…...
突发!GitHub 被曝封禁中国区 IP
昨天,大量国内开发者发现,未登录状态下访问GitHub官网时,页面显示“Access to this site has been restricted.”,中国大陆及香港IP均被限制。尽管GitHub官方尚未发布声明,但多方实测显示: 猪哥亲测在已登…...
向量数据库Qdrant 安装 不使用docker
一、导读 环境:Ubuntu 24.04、Windows 10、WSL 2、Qdrant 1.13.4 背景:换了新工作,使用qdrant作为向量库,需要不使用docker安装 时间:20250415 说明:初入职,不了解,暂且记下 二、…...
基于坐标的神经表示实现零样本学习以用于快速三维多参数定量磁共振成像|文献速递-深度学习医疗AI最新文献
Title 题目 Coordinate-based neural representation enabling zero-shot learning for fast 3D multiparametric quantitative MRI 基于坐标的神经表示实现零样本学习以用于快速三维多参数定量磁共振成像 01 文献速递介绍 定量磁共振成像(qMRI)能…...
每日算法-250415
每日算法 - 2024-04-15: 今天我们来解决两道 LeetCode 上关于在旋转排序数组中寻找最小值的问题。 153. 寻找旋转排序数组中的最小值 题目描述 思路 核心思想是利用 二分查找。 解题过程 一个升序排序的数组(无重复元素)在经过若干次旋转后…...
第16届蓝桥杯省赛JavaB组真题回顾
第16届蓝桥杯省赛已经结束了,第一次参加也是坐牢了4个小时,现在还是来总结一下吧(先声明以下的解法,大家可以当作一种思路来看,解法不一定是正解,只是给大家提供一种能够正常想到的思路吧) 试题…...
[Godot] C#人物移动抖动解决方案
在写一个2D平台跳跃的游戏代码发现,移动的时候会抖动卡顿的厉害,后来研究了一下抖动问题,有了几种解决方案 1.垂直同步和物理插值问题 这是最常见的可能导致画面撕裂和抖动的原因,大家可以根据自己的需要调整项目设置࿰…...
hackmyvm-quick2
收集信息 arp-scan -l nmap 192.168.66.74 dirsearch -u http://192.168.66.74 -e * 访问file.php 尝试查看/etc/passwd 抓包 payload: /file.php?file=/home/andrew/.bashrc /file.php?file=/home/nick/.bashrc...
TDengine 与其他时序数据库对比:InfluxDB/TimescaleDB 选型指南(一)
引言 在当今数字化时代,物联网(IoT)、工业互联网等领域蓬勃发展,产生了海量的时序数据。这些数据记录了设备状态、传感器读数、业务指标等随时间变化的信息,对于企业的运营监控、数据分析和决策制定起着关键作用。为了…...
Jetson agx Orin 适配Xenomai4
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 目录 文章目录 前言 一、Xenomai 4 二、使用步骤 1.获取源码 2.编译源码 3、安装 4、运行效果 5、libevl 总结 前言 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了…...
Terraform - 理解 Count 和 For_Each 循环
概述 使用 Terraform 时,您可能需要为同一资源创建多个实例。这时 count 和 for_each 循环就派上用场了。这些循环允许您创建具有相同配置但具有不同值的多个资源。本指南将讲解如何在 Terraform 中使用 count 和 for_each 循环。 Terraform 中的 Count Terraform …...
Git本地更新和远端同步操作
1、将远端文件夹拉取到本地 从0—1:克隆 在文件夹空白处点击:Git克隆 输入url,克隆到本地 输入远端文件地址,点击确定,远端文件即可克隆到本地 2、拉取远端更新到本地 文件克隆到本地后,每次更新需…...
激活函数Softmax在不同维度上的应用 | dim参数理解
理解 Softmax 在不同维度上的应用,关键在于明确 Softmax 的作用以及 dim 参数的意义。Softmax 的目标是将输入张量的某些元素转换为概率分布,使得这些元素的和为1。dim 参数决定了沿着哪个维度进行归一化操作。 1. Softmax 的基本原理 Softmax 函数的公…...
地理人工智能中位置编码的综述:方法与应用
以下是对论文 《A Review of Location Encoding for GeoAI: Methods and Applications》 的大纲和摘要整理: A Review of Location Encoding for GeoAI: Methods and Applications 摘要(Summary) 本文系统综述了地理人工智能(G…...
6.DJI-PSDK:psdk订阅无人机高度/速度/GPS/RTK/时间/经纬度等消息及问题解决
DJI-PSDK:psdk订阅无人机高度/速度/GPS/RTK/时间/经纬度等消息 消息订阅可以获取绝大多数无人机的动态信息,包括无人机的姿态、速度、加速度、角速度、高度、GPS 位置、云 台的角度和状态、飞行模式和飞行状态、电机和电池等各类关键信息。 这些信息并不会“一股脑儿地”全部…...
ArrayList的subList的数据仍是集合
ArrayList的subList结果不可强转成ArrayList,否则会抛出 ClassCastException异常 • 级别: 【CRITICAL】 • 规约类型:BUG • 最坏影响: 程序错误,抛出异常 说明:subList 返回的是ArrayList的内部类SubL…...
VS Code怎么换颜色
在 VS Code 中,你可以通过修改主题或自定义编辑器颜色来将界面改为白色。以下是几种方法: 方法 1:切换浅色主题(推荐) VS Code 自带多个浅色主题,可以直接切换: 按快捷键 Ctrl K,…...
jupyter中切换Anaconda虚拟环境
jupyter中切换虚拟环境 查看python路径 import sys sys.executable这个命令会输出当前 Notebook 使用的 Python 可执行文件的路径 2. 查看安装的包和环境信息(前两步都在jupyter notebook中进行) !which python !python --version !pip list将你的虚拟…...
红帽认证 Linux安全 级别
红帽认证体系将安全能力划分为专项技能认证与架构师路径,覆盖从基础加固到企业级安全架构设计。以下是安全相关认证的级别、核心内容及职业定位: 一、红帽安全认证分级与定位 认证名称级别考试代码核心方向考试难度适用人群Red Hat Certif…...
从服务器多线程批量下载文件到本地
1、客户端安装 aria2 下载地址:aria2 解压文件,然后将文件目录添加到系统环境变量Path中,然后打开cmd,输入:aria2c 文件地址,就可以下载文件了 2、服务端配置nginx文件服务器 server {listen 8080…...
WPF 中的元素继承层次结构 ,以下是对图中内容的详细说明:
顶层基类 DispatcherObject:处于继承体系最顶端,是一个抽象类。它为 WPF 元素提供了与 Dispatcher(调度器)交互的能力,Dispatcher 负责管理线程间的消息传递,确保 UI 操作在正确的线程(通常是 …...
ROS IkFast运动学插件
ikFast运动学插件生成 环境安装ROS依赖安装openrave依赖下载依赖代码工具使用urdf转dae设置精度查看模型关节生成代码生成插件 环境 ubuntu 20.04ROS版本:noetic 安装ROS依赖 sudo apt-get install -y ros-noetic-desktop ros-noetic-collada-urdf ros-noetic-mov…...
Flink Hive Catalog最佳实践
Flink Hive Catalog 最佳实践 一、配置与初始化 依赖管理 Hive Connector 版本对齐:需确保 flink-sql-connector-hive 版本与 Hive 版本严格匹配(如 Hive 3.1.3 对应 flink-sql-connector-hive-3.1.3_2.12),同时添加 Hadoop 遮蔽…...
接口测试之postman使用指南
一、为何使用postman postman是一款简单高效的接口测试工具,能够很方便发送接口请求,易于保存接口请求脚本,postman提供接口响应数据比对功能,可以设置预期结果作断言,还能把测试用例放在一个集合中批量执行ÿ…...
小豆包api:支持GPT-4.1全新系列模型api,纯官逆向可用!
今天凌晨,OpenAI正式发布GPT-4.1系列模型,带来标准版GPT-4.1,更轻量快速GPT-4.1 mini和极致性价比的GPT-4.1 nano三款模型,全面超越GPT-4o,更聪明、更便宜。 小豆包api已全面支持GPT-4.1全新系列模型! 与前…...
GPTNet如何革新创意与效率
引言 人工智能正在以前所未有的速度改变我们的工作与生活方式,从智能写作到视觉创作,AI工具已成为不可或缺的伙伴。在众多平台中,GPTNet以其强大的功能整合和直观体验崭露头角。它不仅汇集了GPT系列、Claude、Grok、Gemini等顶级对话模型&am…...
3.3.6 VO-O语法- 流程算子
流程算子是VO语言最重要的一类语法算子。它们是VO语言特有的语法概念。这些算子属于容器算子,用于组织管理各类流程。这样的设计有利于流程的复用。可以将流程视为一个大级别的函数模块,在更大的业务逻辑中复用,从而降低业务开发的复杂度&…...
c++引入nacos,详细步骤
以下是将Nacos引入C项目的详细步骤,包括安装、配置和代码实现: 1. 安装Nacos服务器 下载Nacos服务器安装包,可以从Nacos官网获取最新版本。 解压安装包并启动Nacos服务器: cd nacos/bin sh startup.sh -m standalone 这将启动…...
OpenAI 最新发布的 GPT-4.1 系列在 API 中正式上线
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
亚远景-自动驾驶时代,ASPICE评估标准将如何演进?
自动驾驶时代,ASPICE评估标准将从以下几个方面演进: 1. 技术领域的扩展 增加硬件工程和机器学习过程组 :ASPICE 4.0版本新增了硬件工程和机器学习过程组,以应对自动驾驶系统中硬件与软件深度融合的需求。自动驾驶功能的实现不仅依…...
Redis 数据类型全解析:从基础到实战应用
精心整理了最新的面试资料和简历模板,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 Redis 作为高性能的键值对存储系统,其丰富的数据类型是实现复杂业务逻辑的核心优势。本文将深入解析 Redis 六大核心数据类型及扩展类型ÿ…...
基于JSP+MySQL实现用户注册登录及短信发送功能
用户注册信息存入数据库 内容介绍 此项目是前台用户的登录和注册,,这部分包括两个子部分:其中一个为新用户注册,在这里我们可以通过注册浏览更多信息;另一个是用户登录,用户登录系统是一.般 Web 网站都有的子系统,其作用是限制该网站某些资…...
Spark-SQL核心编程2
路径问题 相对路径与绝对路径:建议使用绝对路径,避免复制粘贴导致的错误,必要时将斜杠改为双反斜杠。 数据处理与展示 SQL 风格语法:创建临时视图并使用 SQL 风格语法查询数据。 DSL 风格语法:使用 DSL 风格语法查询…...
Flink SQL SavePoint最佳实践
以下是 Flink SQL Savepoint 最佳实践,涵盖配置、触发、恢复及注意事项,高效管理作业状态: 一、Savepoint 的配置与触发 1. 基础配置 存储路径:在 flink-conf.yaml 中全局设置 Savepoint 存储目录,避免每次手动指定路…...
【无标题】Spark-SQL编程(2)
以下是今天学习的知识点以及代码测试: Spark-SQL核心编程(四) 实验内容: 利用IDEA开发Spark-SQL。 实验步骤: 利用IDEA开发Spark-SQL 创建子模块Spark-SQL,并添加依赖 <dependency> <grou…...
django项目之添加资产信息功能
资产信息功能添加 目录 1.创建表格 2.页面展示 3.新增和修改 4.删除 这篇文章的内容, 就是在前面做的基础上, 新增一个资产管理功能, 其实就和之前的部门信息还有员工信息差不多的, 但是这篇文章里面, 会有些细节的地方, 和之前的不太一样。那下面我们就开始讲述这篇文章…...