【数据库】事务
目录
1. 什么是事务?
2. 事务的ACID特性
3. 为什么使用事务?
4. 如何使用事务
4.1 查看支持事务的存储引擎
4.2 语法
4.3 保存点
4.4 自动/手动提交事务
5. 事物的隔离性和隔离级别
5.1 什么是隔离性
5.2 隔离级别
5.3 查看和设置隔离级别
1. 什么是事务?
事务保证数据安全,索引提升查询效率
事务把一组SQL语句打包成一个整体,在这组SQL执行过程中,要么全部成功,要么全部失败,这组SQL语句可以是一条也可以是多条。
2. 事务的ACID特性
事务的ACID特性是指Atomicity(原子性)、Consistency(一致性)、Isolation(隔离性)和Durability(持久性)。
Atomicity(原子性):一个事务中的所有操作,要么全部成功要么全部失败,不会出现执行一半的情况,如果事务在执行过程中发生错误,会回滚(Rollback)到事务开始前的状态,就像这个事务没有执行过。原子性是支持事务的数据库中最基本的一个特性。
Consistency(一致性):事务执行完成后,保证数据正确且符合预期,数据库的完整性不会被破坏。写入的数据必须完全符合所有的预设规则,包括数据的精度、关联性以及关于事务执行过程中服务器崩溃后如何恢复。
Isolation(隔离性):多个事务之间不能相互影响。数据库允许多个并发事务同时对数据进行读写和修改,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务可以指定不同的隔离级别,以权衡在不同的应用场景下数据库性能和安全。
Durability(持久性):事务一旦提交,将会保存在存储介质中,即使数据库损坏也不会影响数据的安全。事务处理结束后,对数据的修改将永久写入存储介质,即便系统故障也不会丢失。
事务最终要保证一致性:一致性通过原子性、隔离性和持久性来实现
3. 为什么使用事务?
事务具备的ACID特性,使得支持事务的数据库能够简化我们的编程模型,不需要考虑各种各样的潜在错误和并发问题,在使用事务时,要么提交要么回滚,不用考虑网络异常、服务器宕机等其他因素,因此我们接触的事务本质上是数据库对ACID模型的一个实现,为应用层服务。
4. 如何使用事务
4.1 查看支持事务的存储引擎
MySQL支持事务的存储引擎是InnoDB,可以通过show engines;查看:
4.2 语法
-- 开始一个新的事务
start transaction;
-- 或
begin;-- 提交当前事务,并对更改持久化保存
-- commit之后不能再回滚,因为事务已经提交,数据已落盘
commit;-- 无论提交还是回滚,事务都会关闭-- 回滚当前事务,取消其更改(撤销所有操作,回到事务开始之前)
rollback;
4.3 保存点
在事务执行的过程中设置保存点,回滚时指定保存点可以把数据恢复到保存点的状态
-- 设置保存点
savepoint point1;
-- 回滚到第二个保存点
rollback to point2;
-- 如果只写rollback就会回滚到事务最开始
rollback;
4.4 自动/手动提交事务
默认情况下事务自动提交和回滚(发生异常时)。一个事务只包含一条DML语句
查看事务是否自动提交可以使用以下语句:
on表示自动提交开启
可以通过以下语句设置事务为自动或手动提交:
注意:
- 只要使用start transaction或begin开启事务,必须通过commit提交才会持久化,与是否设置set autocommit无关
- 手动提交模式下,不用显示开启事务,执行修改操作后,提交或回滚事务时直接使用commit或rollback
- 已提交的事务不能回滚
5. 事物的隔离性和隔离级别
5.1 什么是隔离性
不同的客户端对同一张表进行数据修改时可能出现相互影响的情况,为了保证不同事物之间在执行过程中不受影响,事物之间需要进行隔离,这种特性称为隔离性
5.2 隔离级别
事务间不同程度的隔离称为事务的隔离级别。不同隔离级别在性能和安全方面做了取舍,有的隔离级别注重并发性、有的注重安全性、有的并发和安全适中。MySQL的InnoDB引擎中事务的隔离级别有四种:
- read uncommitted,读未提交(安全性最低、性能最高)(会出现“脏读”现象:事务A对数据进行修改,事务B访问事务A未提交的数据)
- read committed,读已提交(会出现“不可重复读”现象:事务A第一次查询某条记录,事务B对此条记录进行修改并提交,事务A再次查询这条记录时,与第一次查询结果不一致)
- repeatable read,可重复读(默认)(会出现“幻读”现象:两次查询得到的结果集不同)(InnoDB存储引擎中,使用了next-key锁,锁住了目标行和之前的间隙,解决了部分的幻读问题)
- serializable,串行化(安全性最高、性能最低)(解决了所有的数据安全问题,所有事务都是一个挨一个执行,一个事务必须要等到上一个事务执行完才能执行)
5.3 查看和设置隔离级别
事务的隔离级别分为全局作用域和会话作用域,查看不同作用域事务的隔离级别,可以使用以下方式:
# 全局作用域
select @@global.transaction_isolation;
# 会话作用域
select @@session.transaction_isolation;
可以看到默认的事务隔离级别是repeatable-read(可重复读)
# 通过global|session分别指定不同作用域的事务隔离级别
set [global|session] transaction isolation level level|access_mode;# 隔离级别
level:{repeatable read # 可重复读| read committed # 读已提交| read uncommitted # 读未提交| serializable # 串行化
}# 访问模式
access_mode:{read write #表示事务可以对数据进行读写| read only #表示事务只读,不能对数据进行读写
}# 示例
# 设置全局事务隔离级别为串行化,后续所有事务生效,不影响当前事务
set global transaction isolation level serializable;
# 设置会话事务隔离级别为串行化,当前会话后续的所有事务生效,不影响当前事务,可以在任何时候执行
set session transaction isolation level serializable;
# 如果不指定任何作用域,设置只针对下一个事务,随后的事务恢复之前的隔离级别
set transaction isolation level serializable;
# 方式一
set global transaction_isolation='serializable';
# 注意使用set语法时有空格要用'-'代替
set session transaction_isolation='repeatable-read';# 方式二
set @@global.transaction_isolation='serializable';
# 注意使用set语法时有空格要用'-'代替
set @@session.transaction_isolation='repeatable-read';
相关文章:
【数据库】事务
目录 1. 什么是事务? 2. 事务的ACID特性 3. 为什么使用事务? 4. 如何使用事务 4.1 查看支持事务的存储引擎 4.2 语法 4.3 保存点 4.4 自动/手动提交事务 5. 事物的隔离性和隔离级别 5.1 什么是隔离性 5.2 隔离级别 5.3 查看和设置隔离级别 1…...
C++:详解命名空间
目录 前言 一、命名空间是什么? 1.1命名空间域的定义 二、为什么有命名空间? 三、命名空间的用法 总结 前言 主要讲解命名空间是什么?为什么有命名空间?以及它的用法 一、命名空间是什么? 命名空间域(nam…...
ClickHouse核心架构设计
列式存储原理与数据压缩 列式存储原理 列式存储 vs 行式存储 特性行式存储(如MySQL)列式存储(ClickHouse)数据排列按行连续存储(所有字段相邻)按列连续存储(单列数据紧密排列)适用场…...
K8s-Pod详解
Pod介绍 Pod是Kubernetes中能够创建和部署的最小单元,是Kubernetes集群中的一个应用实例,总是部署在同一个节点Node上。(程序运行部署在容器中,容器必须存在pod中。pod可以认为是容器的封装,一个pod中可以存在一个或者…...
SSM(SpringMVC+spring+mybatis)整合的步骤以及相关依赖
目录 (一)导入SSM框架相关的依赖 ①创建一个新的web工程(idea2023版) ②思考三者之间的联系,回忆依赖 ③在pom.xml文件中引入依赖坐标 (二)使用注解开发,编写Spring的配置类&am…...
【LeetCode】算法详解#5 ---轮转数组
1.题目介绍 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 1 < nums.length < 105-231 < nums[i] < 231 - 10 < k < 105 2.解决思路 这道题的解决方法有很多,我这里给大家介绍我使用的方法。…...
LeetCode 打家劫舍+删除并获得点数
题目描述 打家劫舍题目传送门1 删除并获得点数传送门2 思路 这两道题看似毫无关系,但竟然可以用桶数组联系起来!! 先说打家劫舍这道题 限制条件是不能走相邻的屋,再联想到跳台阶(走一格或两格)&#x…...
【计量地理学】实验四 主成分分析与莫兰指数
一、实验内容 (一) 某地区35个城市2004年的7项经济统计指标数据见(数据中的“题目1”sheet)。 (1)试用最短距离聚类法对35个城市综合实力进行系统聚类分析,并画出聚类谱系图: 在此次实验内容…...
TDengine 性能监控与调优实战指南(二)
四、TDengine 性能调优实战 4.1 硬件层面优化 硬件是 TDengine 运行的基础,其性能直接影响着 TDengine 的整体表现。在硬件层面进行优化,就如同为高楼大厦打下坚实的地基,能够为 TDengine 的高效运行提供有力支持。 CPU:CPU 作…...
Linux `init 5` 相关命令的完整使用指南
Linux init 5 相关命令的完整使用指南—目录 一、init 系统简介二、init 5 的含义与作用三、不同 Init 系统下的 init 5 行为1. SysVinit(如 CentOS 6、Debian 7)2. systemd(如 CentOS 7、Ubuntu 16.04)3. Upstart(如 …...
uni-app中map的使用
uni-app中map的使用 一、基本使用步骤 1. 引入 map 组件 在 .vue 文件的 template 中直接使用 <map> 标签: <template><view><map :latitude"latitude" :longitude"longitude" :markers"markers" style&quo…...
备战2025年全国信息素养大赛图形化大赛——绘制雪花
以上题目点击下方地址,可查看答案或者在线编程~ 绘制雪花_scratch_少儿编程题库学习中心-嗨信奥https://www.hixinao.com/tiku/scratch/show-5775.html?_shareid3 程序演示可点击下方地址,支持源码和素材获取,方便高效ÿ…...
1Panel - 基于Web的Linux服务器管理工具
本文翻译整理自:https://github.com/1Panel-dev/1Panel 文章目录 一、关于 1Panel相关链接资源关键功能特性 二、安装系统要求安装脚本 三、基本使用(快速开始)1、快速安装2、访问面板 四、界面展示五、专业版六、安全信息感谢 一、关于 1Pan…...
基于SpringAI Alibaba实现RAG架构的深度解析与实践指南
一、RAG技术概述 1.1 什么是RAG技术 RAG(Retrieval-Augmented Generation)检索增强生成是一种将信息检索技术与生成式AI相结合的创新架构。它通过以下方式实现智能化内容生成: 知识检索阶段:从结构化/非结构化数据源中检索相关…...
SpringBoot Actuator指标收集:Micrometer与Prometheus集成
文章目录 引言一、Spring Boot Actuator基础二、Micrometer简介与集成三、基本指标收集与配置四、自定义业务指标实现五、与Prometheus集成六、实战案例:API性能监控总结 引言 在现代微服务架构中,监控应用程序的健康状况和性能指标变得至关重要。Sprin…...
Spring Boot 集成 Kafka 及实战技巧总结
Spring Boot 集成 Kafka 及实战技巧总结 一、Spring Boot 集成 Kafka 添加依赖 <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId> </dependency>配置 Kafka 在 application.yml 中配置生产…...
LeetCode hot 100—分割等和子集
题目 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 示例 示例 1: 输入:nums [1,5,11,5] 输出:true 解释:数组可以分割成 [1, 5, 5] 和 [11] 。…...
JUC复习及面试题学习
资源来自沉默王二、小林coding、竹子爱熊猫、代码随想录 一、JUC 1、进程与线程 进程是对运行程序的封装,是系统进行资源调度和分配的最小单位。 线程是进程的子任务,是CPU调度分配的基本单位 不同的进程之间很难数据共享,同进程下的不同线…...
The_Planets_Earth靶场笔记(VulnHub)
环境说明: kali地址:192.168.144.128 靶机地址:192.168.144.181 靶机网卡改为NAT模式。 靶机下载地址: https://download.vulnhub.com/theplanets/Earth.ova 一.信息收集: 1.主机探测: 使用如下命令…...
dawgctf 2025 writeup
dawgctf 2025 writeup 赛事信息pwnJust Parry Lol miscDont Touch My FoneThe BirdsMystery Signal IinternsProjectSuspicious scriptSpectral SecretsCaddyshack forensicsKeeping on ScheduleJust Packets CryptoCipher For Good osintEs ist alles in ButterLook Long and …...
机器学习(神经网络基础篇)——个人理解篇6(概念+代码)———参数优化篇
1 在声明一个类中,构建一个属于类的函数,前面为什要加上“self”? 就像下面这一串代码: class TwoLayerNet:def __init__(self, input_size, hidden_size, output_size,weight_init_std0.01):# 初始化权重self.params {}self.p…...
AI速读:解锁LLM下Game Agent的奇妙世界
在 AI 浪潮中,大语言模型(LLMs)正重塑游戏智能体格局。想知道基于 LLMs 的游戏智能体如何运作,在各类游戏中有何惊艳表现,未来又将走向何方? 大型语言模型(LLMs)的兴起为游戏智能体的…...
个人所得税
文章目录 一、名词解释二、个人所得税计算方法 (举例)1.累计预扣预缴应纳税所得额、本期应预扣预缴税额2.个人所得税预扣率表一3.个人所得税计算举例 三、专项附加扣除政策介绍四、年度汇算清缴政策介绍五、常见问答 一、名词解释 累计预扣法是指扣缴义务人在一个纳税年度内预…...
DEA-Net:基于细节增强卷积和内容引导注意力的单图像去雾
IEEE TIP 2024 | DEA-Net:基于细节增强卷积和内容引导注意力的单图像去雾 DEA-Net: Single image dehazing based on detail-enhanced convolution and content-guided attention paper name: DEA-Net: Single image dehazing based on detail-enhanced convolutio…...
StringEscapeUtils:给你的字符串穿上“防弹衣“——转义工具类深度解析
各位代码勇士们好!今天我们要聊的是Apache Commons Lang3中的StringEscapeUtils工具类。如果说StringUtils是瑞士军刀,那StringEscapeUtils就是你的字符串保镖,专门负责在各种危险场合保护你的字符串安全! 一、为什么需要字符串转…...
Sharding-JDBC 系列专题 - 第二篇:广播表(Broadcast Tables)
Sharding-JDBC 系列专题 - 第二篇:广播表(Broadcast Tables) 本系列专题旨在帮助开发者深入掌握 Sharding-JDBC,一个轻量级的分布式数据库中间件。本篇作为系列的第二篇文章,将详细讲解 广播表(Broadcast Tables) 的概念、配置、使用场景、工作原理以及实战案例。广播表…...
PySide6 GUI 学习笔记——常用类及控件使用方法(常用类矩阵QRect)
文章目录 一、构造与初始化方法二、坐标与尺寸获取三、坐标与尺寸设置四、几何运算方法五、移动与调整方法六、状态判断方法七、类型转换方法八、操作符重载九、静态方法十、特殊方法附录方法速查表注意的问题交集和并集图解 📘 PySide6.QtCore.QRect 使用整数精度定…...
常见的页面报错
目录 1、 405报错,方法不允许 2、 404报错,未找到资源 404报错的两种可能: 1、前端找不到后端的资源: 2、后端找不到返回的资源: 3、 400报错,错误的请求 后端返回的数据类型与前端不匹配 前端传递的参…...
人机共跑,马拉松人型机器人同跑
马拉松比赛对人形机器人来说,是一场对硬件极限的测试,涉及机械、传感器、能源管理等多个方面。用户问的是硬件方面的考察和改进,这意味着我的回答需要聚焦于硬件性能,而不是算法或软件的优化。 对人形机器人硬件的考研 机械结构与…...
ES6 第一讲 变量定义 堆与栈 字符串的扩展和数值型的扩展
文章目录 1.ES6变量定义2.ES6堆和栈3.字符串的扩展3.1 模板字符串3.2 判断是否以指定的字符串开头或结尾3.3 字符串重复输出3.4 填充方法3.5 去除前后字符串空格3.6 返回参数指定位置的字符 4. 数值型的扩展4.1 二进制0B 八进制0O4.2 判断是否是一个无穷大的数字 (判…...
Linux 动、静态库的实现
前言:当我们写了一段代码实现了一个方法,如果我们不想把方法的实现过程暴露给别人看,可以把代码打包成一个库,其中形成后缀为.a的是静态库,后缀为.so的为动态库;当别人想使用你的方法时,把打包好…...
linux多线(进)程编程——(9)信号量(二)
前言 上一篇文章我们讲解了信号量的基础用法,这一篇文章我们承接上面的内容,给大家进一步提升对信号量的理解。如果没有看过上一篇文章,请大家移步linux多线(进)程编程——(9)信号量(一) 案例…...
编码器---正交编码器
一、正交编码器定义与核心作用 正交编码器(Orthogonal Encoder),又称增量式编码器,是一种通过输出两路相位差90的脉冲信号(A相、B相)来测量旋转角度、速度和方向的传感器。其核心优势是通过A/B相的脉冲顺序…...
【HDFS入门】HDFS故障排查与案例分析:从日志分析到实战解决
目录 1 HDFS故障排查概述 2 三大常见故障类型解析 2.1 块丢失问题处理流程 2.2 副本不足问题架构 2.3 DataNode无法启动诊断 3 日志分析实战技巧 3.1 NameNode日志分析框架 3.2 DataNode日志分析流程 4.1 实战案例分析 4.2 集群性能突然下降 4.2 数据读写异常处理 …...
爆肝整理!Stable Diffusion的完全使用手册(二)
继续介绍Stable Diffusion的文生图界面功能。 往期文章详见: 爆肝整理!Stable Diffusion的完全使用手册(一) 下面接着对SD的文生图界面的进行详细的介绍。本期介绍文生图界面的截图2,主要包含生成模块下的采用方法、调度类型、迭…...
经典算法 表达式求值
表达式求值 问题描述 给你一个只包含、-、*、/、0、1、2、3、4、5、6、7、8、9的字符串求出该字符串所代表的表达式的值。这里的除法,为了简便,为整数除法,所以答案一定也是一个整数。保证0不作被除数。 示例输入 (16*(141))((13)*(74))*…...
【Java】接口interface学习
参考资料::黑马程序员入门到飞起上 1 概述 在学习完抽象类后,我们了解到抽象类中既可以包含抽象方法,也能有普通方法、构造方法以及成员变量等。而接口则是一种更为彻底的抽象形式。在JDK7及之前的版本中,接口内全部为抽象方法&…...
数据结构实验7.1:二叉树的遍历
文章目录 一,实验目的二,实验描述三,基本要求四,算法分析五,实验操作六,示例代码七,运行效果一,实验目的 深入理解树与二叉树的基本概念,包括节点、度、层次、深度等,清晰区分二叉树与一般树的结构特点,为后续学习和应用打下坚实基础。熟练掌握用递归方法实现二叉树…...
seata db模式,nacos注册中心,spring boot ,spring cloud ,jdk1.8 完成的配置步骤
1. 环境准备 确保以下环境已经安装并正常运行: JDK 1.8MySQL(或其他支持的数据库)Nacos Server(用于注册中心和配置中心)Seata Server 2. 配置 Seata Server (1) 下载并解压 Seata 从 Seata 官方 GitHub 下载最新版…...
C++进阶-多态
文章目录 C进阶--多态概念多态的定义及实现多态的构成条件实现多态的两个重要条件虚函数虚函数的重写及覆盖协变析构函数的重写(面试被问及最好需要举例说明)override和final关键字重载,重写(覆盖),隐藏&am…...
Linux教程-常用命令系列三
文章目录 1. 网络安全常用命令1. su (Switch User)2. chmod (Change Mode)3. chown (Change Owner)4. ps (Process Status)5. who6. top7. free8. kill9. gedit10. find总结 2. 字符串显示命令2.1 基本语法2.2 常用选项2.3 核心功能与示例2.3.1 输出字符串2.3.2 输出变量2.3.3 …...
GIS开发笔记(9)结合osg及osgEarth实现三维球经纬网格绘制及显隐
一、实现效果 二、实现原理 按照5的间隔分别创建经纬线的节点,挂在到组合节点,组合节点挂接到根节点。可以根据需要设置间隔度数和线宽、线的颜色。 三、参考代码 //创建经纬线的节点 osg::Node *GlobeWidget::createGraticuleGeometry(float interv…...
nuxt3前端开发以及nuxt3和nuxt2项目的详细差异点
以下是 Nuxt 3 前端开发的详细指南以及与 Nuxt 2 的核心差异总结,涵盖配置、开发模式、API 变化等关键方面: 一、Nuxt 3 前端开发核心要点 1. 项目初始化 # Nuxt 3 npx nuxi init <project-name> cd <project-name> npm install npm run dev# Nuxt 2 (对比) np…...
Android学习总结之APK打包流程
一、预处理阶段(编译前准备) 1. AIDL 文件处理(进程间通信基础) 流程: 用于实现 Android 系统中不同进程间的通信(IPC)。在项目构建时,AIDL 编译器会将 .aidl 文件编译为 Java 接口…...
java面试篇(常见的集合底层原理)
集合 1、arraylist源码分析 三种构造方法: 扩容的逻辑: 2、ArrayList的底层实现原理是什么? ArrayList listnew ArrayList(10)中的list扩容几次 3、如何实现数组和List之间的转换 4、LinkedList和arraylist的区别 5、hashmap的实现原理 二叉…...
RAG框架精选2
原文链接:https://i68.ltd/notes/posts/20250406-llm-rag2/ 清华Hyper-RAG 使用超图驱动的RAG对抗LLM幻觉论文链接:https://arxiv.org/pdf/2504.08758项目仓库:https://github.com/iMoonLab/Hyper-RAG清华Hyper-RAG:利用超图建模高阶关系,让DeepSeek/Q…...
Redis进阶学习
什么是Redis? Redis是一个key-value结构的非关系型数据库,将数据存储在内存中,结构简单(五种数据结构:string、list、set、zset、hash),数据读写速度快,还可以将数据持久化到硬盘上。…...
【读书笔记·VLSI电路设计方法解密】问题63:为什么可测试性设计对产品的财务成功至关重要
可测试性设计至关重要,因为我们不希望将劣质或故障部件交付给客户。向客户交付过多不良部件意味着财务灾难,更会损害企业声誉并导致商业机会流失。 若设计中未嵌入可测试性设计(DFT),区分良品与不良品的唯一方法就是由应用工程师或客户在实际应用环境中测试芯片。此时芯片…...
Federated Weakly Supervised Video Anomaly Detection with Multimodal Prompt
标题:联邦弱监督视频异常检测的多模态提示方法 原文链接:https://ojs.aaai.org/index.php/AAAI/article/view/35398 源码链接:https://github.com/wbfwonderful/Fed-WSVAD 发表:AAAI-2025 摘要(Abstract) …...
计算机视觉与深度学习 | LSTM原理,公式,代码,应用
LSTM(长短期记忆网络)详解 一、原理 LSTM(Long Short-Term Memory)是RNN的改进版本,通过引入门控机制(输入门、遗忘门、输出门)和细胞状态(Cell State),有效解决传统RNN的梯度消失/爆炸问题,擅长捕捉长距离依赖关系。 核心思想: 细胞状态(C_t):贯穿整个时间步…...