MYSQL——事务管理

什么是事务

在数据库使用者角度,事务就是完成一个事件。例如一个员工信息数据库,要完成员工离职的事件,可能需要很多操作,比如删除员工基本信息以及员工在公司的表现,薪资水平等。而这一系列的操作就是为了完成员工离职这一个事件,这就是事务。事务可以是一个sql语句,也可以是多个。但是,事务不仅仅是几个sql语句的简单集合,这些语句还要有如下属性:

  • 原子性Atomicity:在处理事务这个操作上,只有两种状态:完成和未完成。绝对不可能存在正在完成这个状态。
  • 持久性Durability:事务处理完之后,数据的修改是永久的,即使系统故障也不会影响
  • 隔离性Isolation:由于事务是并发的,为了防止多个事务交叉执行产生错误,需要对事务间进行隔离。
  • 一致性Consistence:在事务完成后,数据库的结构,规则等完整性没有被破坏。这一性质的实现是依赖前三个性质的。

为什么出现事务

事务是面向应用层的用户的,在完成一个事务时,应用者只需要关注完成结果,事务失败就回滚。不需要用户考虑出现的各种问题,简化了用户的使用。例如,银行的公务员,在进行转账操作时,如果转账失败就将金额退回原账户,不需要考虑是服务器出问题了还是网络出问题了。

事务的版本支持

MySQL 中只有使用了 Innodb 数据库引擎的数据库或表支持事务。可以使用指令查看:
show engines \G

事务的提交方式

手动提交

事务开始:

begin;

然后进行sql语句处理数据,处理结束后提交事务:

commit;

在事务未提交前,所有的数据操作都不会被其他mysql客户端访问到 

自动提交

一般情况下,自动提交是开启状态,可以查询一下:

show variables like 'autocommit';

 

 自动提交适用于我们直接使用sql语句的情景,即我们不使用手动提交的时候,autocommit变量对手动提交没有任何影响,手动提交必须手动commit。此时,单个sql语句会被看作一个事务,在执行这条语句后,自动提交。但是如果将autocommit关闭后,就需要手动提交:

事务的回滚

在事务中,可以设置回滚点。如果在某个时刻想要回到回滚点的状态,可以直接回滚到这个点:

--设置回滚点
savepoint 回滚点名字;
--回滚到回滚点
rollback to 回滚点名字;
--回滚到最开始
rollback;

  • 当我们在处理事务时突然退出mysql,不能commit。事务会自动回滚到开始,相当于执行rollback。
  • 事务一旦提交,就无法回滚。

事务属性的理解

原子性

事务commit前,所有的数据操作都不会更新到数据库中。如果中间的某个语句发生错误,就会回滚到事务开始;只有事务commit后才会更新数据库。这样的回滚机制就让事务只存在开始和完成两个状态,也就是所谓的原子性。

持久性

事务一旦commit,数据库就会更新,这时候即使系统崩溃突然关闭,数据也是修改后的。

隔离性

 为了让并行的事务之间不同程度的避免干扰,就出现了隔离级别这个属性。

隔离级别有四种:

  • 读未提交(Read Uncommitted):所有事务都可以看到其他事务未提交的执行结果,相当于没有隔离性,会造成脏读,幻读,不可重复读等问题
  • 读提交(Read Committed):一个事务只能看到其他的已经提交的事务所做的改变。但是还是会造成不可重复读的问题
  • 可重复读(Repeatable Read):一个事务执行过程中看到的数据,一直跟这个事务启动时看到的数据是一致的。
  • 串行化(Seralizable):会对记录加上读写锁,在多个事务对这条记录进行读写操作时,如果发生了读写冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行

脏读(Dirty Read)是指一个事务读取到另一个事务未提交的数据。如果这个未提交的数据被回滚(Rollback),那么第一个事务读取的数据就是不正确的。

不可重复读是指在一个事务内,最开始读到的数据和事务结束前的任意时刻读到的同一批数据出现不一致的情况

查看与设置隔离性:

--查看全局隔离级别(新起一个会话会使用全局隔离级别)
select @@global.tx_isolation;--查看会话隔离级别
select @@session.tx_isolation;
或者
select @@tx_isolation;--设置全局隔离级别
set global transaction isolation level 
read uncommitted/read committed/repeatable read/serializable;--设置会话隔离级别
set (session) transaction isolation level 
read uncommitted/read committed/repeatable read/serializable;

读未提交

 

读提交

可重复读

串行化

对所有操作全部加锁,进行串行化,不会有问题,但是只要串行化,效率很低,几乎完全不会被采用 

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

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

相关文章

计算机网络基本概念总结

IP地址 概念 使网络中的设备都有唯一的地址标识,用于表示其在网络中的位置。 格式 IP地址是一个32位的二进制数,通常被分割为4个8位二进制数(也就是4个字节),如:01100100.00001000.00001010.00000110。通常…

MySQL系列之如何在Linux只安装客户端

导览 前言Q:如何安装一个Linux环境下的MySQL客户端一、准备文件1. 确认Server版本2. 选择Client安装文件 二、下载并安装1. 下载1.1 寻找文件1.2 文件说明 2. 安装2.1 上传至Linux服务器2.2 执行安装 三、连接验证1. 确认远程授权2. 建立远程连接 结语精彩回放 前言…

flink实战-- flink任务的火焰图如何使用

火焰图 Flame Graphs 是一种有效的可视化工具,可以帮助我们排查如下问题: 目前哪些方法正在消耗 CPU 资源?一个方法的消耗与其他方法相比如何?哪一系列的堆栈调用导致了特定方法的执行?y 轴表示调用栈,每一层都是一个函数。调用栈越深,火焰就越高,顶部就是正在执行的…

【css flex 多行均分有间隙布局】

小程序、web均可使用&#xff0c;我当前用的是小程序 <view class"job_tab_container flex_between"><view class"job_tab_item"></view><view class"job_tab_item"></view><view class"job_tab_item&qu…

高效实现多站点管理的策略与工具解读

内容概要 在当前的数字化环境中&#xff0c;多站点管理显得尤为重要。它不仅能帮助企业在多个市场中有效布局&#xff0c;还能促进资源的合理配置和利用。为了实现高效的多站点管理&#xff0c;首先需要了解其定义及重要性。多站点管理指的是企业在不同地理位置或市场上运营多…

C++STL容器详解——list

目录 一.list 1.list的介绍 2.为什么会有list? 二.list的常见接口 1.list的构造函数 2.list的遍历 3.迭代器类型 4.list的头插头删和尾插尾删 5.list任意位置的插入和删除 6.list的sort()及reverse() 7.迭代器失效 三.整体代码 一.list 1.list的介绍 list的文档说…

【Linux系统编程】第四十四弹---从TID到线程封装:全面掌握线程管理的核心技巧

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、tid是什么 1.1、理解库 1.2、理解tid 1.3、tid中线程局部存储 2、封装线程 2.1、基本结构 2.2、函数实现 2.3、使用…

WPF 打包

打包为单个exe文件直接运行 - - -版本.NET8 新建WPF项目 右键 - 发布 选择发布文件夹 选择发布文件夹 选择发布文件夹 配置 配置,保存 发布 WPF 打包为exe安装程序 示例 实现思路 引导项目中嵌入其它项目可运行目录的zip引导项目中解压zip文件到指定文件夹是…

percona tpc-c程序压测mysql8.0并绘图

1 概述 OLTP数据库选型一般会从稳定性、性能、易用性、官方文档等因素考虑。而在性能这因素&#xff0c;基准测试有sysbench和tpc-c&#xff08;tpc-e是tpc-c的升级版&#xff09;。sysbench的底层测试用例的表结构是简单的&#xff0c;并且不支持join&#xff0c;针对以上两个…

ArcGIS软件之“计算面积几何”地图制作

目录 一、消防站的泰森多边形ex12二、人口调查的泰森多边形三、人口调查的泰森多边形属性设置四、计算面积几何,用于求密度五、求密度六、给“现有中学”属性 R1赋值七、“现有中学”设置多环缓存区 并为它赋值八、“土地使用”为不同的功能区赋值九、三个图层相交十、计算面积…

【Web前端】使用 JSON 处理数据

JSON 是一种基于 JavaScript 对象语法的数据格式&#xff0c;由道格拉斯克罗克福特推广。尽管其语法源于 JavaScript&#xff0c;JSON 仍然是独立于 JavaScript 的&#xff0c;这也是为什么许多编程环境能够解析和生成 JSON 的原因。JSON 可以以对象或字符串的形式存在&#xf…

SMOTE算法深度解析及代码实现

SMOTE算法介绍 SMOTE算法是较为常用的数据增广算法&#xff0c;其核心思路是在少数类别样本内部进行数据合成&#xff0c;更具体的说&#xff0c;其后隐藏的猜想是假定样本 x 0 , x 1 , . . , x N x_0,x_1,..,x_N x0​,x1​,..,xN​都为同一类别&#xff0c;那么他们的线性组合…

基于Redis缓存机制实现高并发接口调试

创建接口 这里使用的是阿里云提供的接口服务直接做的测试&#xff0c;接口地址 curl http://localhost:8080/initData?tokenAppWithRedis 这里主要通过参数cacheFirstfalse和true来区分是否走缓存&#xff0c;正常的业务机制可能是通过后台代码逻辑自行控制的&#xff0c;这…

鸿蒙系统:智能生态的新纪元与开发者的新机遇

正文&#xff1a; 在数字化时代&#xff0c;操作系统作为智能设备的灵魂&#xff0c;其重要性不言而喻。随着技术的不断进步&#xff0c;我们见证了安卓和iOS在全球范围内的广泛应用和影响力。如今&#xff0c;鸿蒙系统&#xff08;HarmonyOS&#xff09;以其创新的分布式架构…

Netty入门二

文章目录 EventLoopChannelFuture 与 PromiseHandler与PipelineByteBuf Netty的核心组件包括以下几种&#xff1a; EventLoop&#xff1a;负责处理注册到其上的channel的所有I/O事件。Channel&#xff1a;表示数据传输的网络通道。Future 与 Promise&#xff1a;Future用于等待…

一文读懂剪枝(Pruner):大模型也需要“减减肥”?

当你听到「剪枝」二字&#xff0c;或许会联想到园丁修整枝叶的情景。而在 AI 大模型领域&#xff0c;这个词有着特殊的含义 —— 它是一种通过“精简”来提升大模型效率的关键技术。随着 GPT、LLaMA 等大模型规模的持续膨胀&#xff0c;如何在保持性能的同时降低资源消耗&#…

单词反转和数组去重,附经典面试题一份

博彦科技笔试&#xff1a; 给定字符&#xff0c;拼接成单词进行反转单词&#xff1b; package org.example;public class Main {public static void main(String[] args) {char[] input {h, e, l, l, o, , w, o, r, l, d, , J, a, v, a};String inputToString new String(…

【51单片机】UART串口通信原理 + 使用

学习使用的开发板&#xff1a;STC89C52RC/LE52RC 编程软件&#xff1a;Keil5 烧录软件&#xff1a;stc-isp 开发板实图&#xff1a; 文章目录 串口硬件电路UART串口相关寄存器 编码单片机通过串口发送数据电脑通过串口发送数据控制LED灯 串口 串口是一种应用十分广泛的通讯接…

构建智能防线 灵途科技光电感知助力轨交全向安全防护

10月27日&#xff0c;在南京南站至紫金山东站间的高铁联络线上&#xff0c;一头野猪侵入轨道&#xff0c;与D5515次列车相撞&#xff0c;导致设备故障停车。 事故不仅造成南京南站部分列车晚点&#xff0c;还在故障排查过程中导致随车机械师因被邻线限速通过的列车碰撞而不幸身…

不使用递归的决策树生成算法

不使用递归的决策树生成算法 利用队列 queue &#xff0c;实现层次遍历&#xff08;广度优先遍历&#xff09;&#xff0c;逐步处理每个节点来建立子树结构。再构建一个辅助队列&#xff0c;将每个节点存储到 nodes_to_process 列表中&#xff0c;以便在树生成完成后可以反向遍…