MySQL事物

news2024/11/27 11:50:27

事务的概念

●事务是一种机制、一个操作序列,包含了一组数据库操作命令,并且把所有的命令作为一个整体

一起向系统提交或撤销操作请求,即这一组数据库命令要么都执行,要么都不执行。

●事务是一个不可分割的工作逻辑单元,在数据库系统上执行并发操作时,事务是最小的控制单

元。

●事务适用于多用户同时操作的数据库系统的场景,如银行、保险公司及证券交易系统等等。

●事务通过事务的整体性以保证数据的一致性。

●事务能够提高在向表中更新和插入信息期间的可靠性。

说白了,所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割

的工作单位。

事务的ACID特点

ACID,是指在可靠数据库管理系统(DBMS)中,事务(transaction)应该具有的四个特性:原子性

(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。这是可靠

数据库所应具备的几个特性。

●原子性:指事务是一个不可再分割的工作单位,事务中的操作要么都发生,要么都不发生。

  1. 事务是一个完整的操作,事务的各元素是不可分的。
  2. 事务中的所有元素必须作为一个整体提交或回滚。
  3. 如果事务中的任何元素失败,则整个事务将失败。

●一致性:指在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。

  1. 当事务完成时,数据必须处于一致状态。
  2. 在事务开始前,数据库中存储的数据处于一致状态。
  3. 在正在进行的事务中,数据可能处于不一致的状态。
  4. 当事务成功完成时,数据必须再次回到已知的一致状态。

●隔离性:指在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据

空间。

1、对数据进行修改的所有并发事务是彼此隔离的,表明事务必须是独立的,它不应以任何方式依赖于或影响其他事务。

2、修改数据的事务可在另一个使用相同数据的事务开始之前访问这些数据,或者在另一个使用相同数据的事务结束之后访问这些数据。

3、也就是说并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的。

当多个客户端并发地访问同一个表时,可能出现下面的一致性问题:

脏读:当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库

中,这时,另外一个事务也访问这个数据,然后使用了这个数据。

不可重复读:指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务

也访问该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一

个事务两次读到的的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样

的,因此称为是不可重复读。(即不能读到相同的数据内容)

幻读:一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,

另一个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,操作前一个事务的

用户会发现表中还有一个没有修改的数据行,就好象发生了幻觉一样。

丢失更新:两个事务同时读取同一条记录,A先修改记录,B也修改记录(B不知道A修改

过),B提交数据后B的修改结果覆盖了A的修改结果。

事务的隔离级别决定了事务之间可见的级别。

MySQL事务支持如下四种隔离,用以控制事务所做的修改,并将修改通告至其它并发的事务:

未提交读(Read Uncommitted(RU)):

允许脏读,即允许一个事务可以看到其他事务未提交的修改。

提交读(Read Committed(RC)):

允许一个事务只能看到其他事务已经提交的修改,未提交的修改是不可见的。防止脏读。

可重复读(Repeatable Read(RR)):---mysql默认的隔离级别

确保如果在一个事务中执行两次相同的SELECT语句,都能得到相同的结果,不管其他事务是否提

交这些修改。可以防止脏读和不可重复读。

串行读(Serializable):---相当于锁表

完全串行化的读,将一个事务与其他事务完全地隔离。每次读都需要获得表级共享锁,读写相互都

会阻塞。可以防止脏读,不可重复读取和幻读,(事务串行化)会降低数据库的效率。
 

mysql默认的事务处理级别是 repeatable read ,而Oracle和SQL Server是 read committed 。

事务隔离级别的作用范围分为两种:

● 全局级:对所有的会话有效

● 会话级:只对当前的会话有效

存储引擎

定义:存储引擎是MySQL数据库的组件,负责执行实际的数据IO操作(数据的存储和提取)。工

作在文件系统之上,数据库的数据会先传输到存储引擎,再按照存储引擎的存储格式保存到文件系

统。

常用的存储引擎:InnoDB   MyISAM

MyISAM 和 InnoDB 的区别?

MyISAM:不支持事务、外键约束;支持全文索引;锁定类型只支持表级锁定;适合单独的查询和

插入的操作;读写会相互阻塞;硬件资源占用较小;数据文件和索引文件是分开存储的,存储成三

个文件:表结构文件.frm、数据文件.MYD、索引文件.MYI

使用场景:适用于不需要事务支持,单独的查询或插入数据的业务场景

InnoDB:支持事务、外键约束;也支持全文索引;锁定类型支持行级锁定(在全表扫描时仍会表

级锁定);读写并发能力较好;缓存能力较好可以减少磁盘IO的压力;数据文件也是索引文件,存

储成:表结构文件.frm、表空间文件.ibd

使用场景:适用于需要事务支持,数据一致性要求较高,数据会频繁更新,读写并发高的业务场景

InnoDB行锁与索引的关系:

InnoDB的行级锁是通过给索引项加锁来实现的。如果对没有索引的字段进行操作会使用全表扫描

并表级锁定。

MySQL 查询数据的执行过程:

1)客户端向 MySQL 服务器发送一条查询请求,连接器负责处理连接,并进行身份验证和权限控

制。

2)MySQL 先检查查询缓存,如果命中缓存,则立刻返回存储在缓存中的结果;否则使用查询解

析器进行SQL语句解析、预处理,再由优化器生成对应的执行计划。

3)MySQL 根据执行计划,调用存储引擎来执行查询。

4)将结果返回给客户端,同时缓存查询结果。

查询全局事务隔离级别:

show global variables like '%isolation%';
SELECT @@global.tx_isolation;

 

查询会话事务隔离级别:

show session variables like '%isolation%';
SELECT @@session.tx_isolation; 
SELECT @@tx_isolation;

设置全局事务隔离级别:

set global transaction isolation level read committed;
set @@global.tx_isolation='read-committed';   #重启服务后失效

●持久性:在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被

回滚。

指不管系统是否发生故障,事务处理的结果都是永久的。

一旦事务被提交,事务的效果会被永久地保留在数据库中。


总结:在事务管理中,原子性是基础,隔离性是手段,一致性是目的,持久性是结果。

事务控制语句

BEGIN 或 START TRANSACTION:显式地开启一个事务。

COMMIT 或 COMMIT WORK:提交事务,并使已对数据库进行的所有修改变为永久性的。

ROLLBACK 或 ROLLBACK WORK:回滚会结束用户的事务,并撤销正在进行的所有未提交的修

改。

SAVEPOINT S1:使用 SAVEPOINT 允许在事务中创建一个回滚点,一个事务中可以有多个

SAVEPOINT;“S1”代表回滚点名称。

ROLLBACK TO [SAVEPOINT] S1:把事务回滚到标记点。

使用 set 设置控制事务

SET AUTOCOMMIT=0;						#禁止自动提交
SET AUTOCOMMIT=1;						#开启自动提交,Mysql默认为1
SHOW VARIABLES LIKE 'AUTOCOMMIT';		#查看Mysql中的AUTOCOMMIT值

死锁:

定义:死锁是指两个或多个事务在同一个资源上相互占用,并请求对方锁定的资源,从而导致相互

阻塞的现象。

如何避免死锁?

1)设置事务的锁等待超时时间 innodb_lock_wait_timeout

2)设置开启死锁检测功能 innodb_deadlock_detect

3)为表建立合理的索引,减少表锁发生的概率

4)如果业务允许,可以降低隔离级别,比如选用 提交读 Read Committed 隔离级别,从而避免间

隙锁导致死锁

5)建议开发人员尽量使用更合理的业务逻辑,比如多表操作时以固定顺序访问表,尽量避免同时

锁定多个资源

6)建议开发人员尽量保持事务简短,减少对资源的占用时间和占用范围

7)建议开发人员在读多写少的场景下采用乐观锁机制

6:18

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

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

相关文章

Animate源文件修改要注意什么?

最近经常有同学提问,如何对Animate源文件,也就是fla格式文件进行修改,这里简单说一下要注意的内容。 首先是要使用Animate软件打开源文件,要尽量使用完整版本的软件,以免无法正常运行代码。接下来就是要注意的几点&…

fmsbggradar|复现CNS同款雷达图并且加上显著P值

文章目录 前言fmsb数据格式参数调整demo ggradar单样本demo多组demo 实战-给radar添加统计量 前言 雷达图,Radar(也称为蜘蛛图或网络图)是一种二维图表,用于显示多变量数据。每个变量由从中心延伸出来的辐条(或轴&…

uniapp 使用cavans 生成海报

uniapp 使用cavans 生成海报 npm install qs-canvas1.创建 useCanvas.js /*** Shopro qs-canvas 绘制海报* version 1.0.0* author lidongtony* param {Object} options - 海报参数* param {Object} vm - 自定义组件实例*/ import QSCanvas from qs-canvas; import { getPos…

花了大几万的踩坑经验!宠物空气净化器哪个牌子好:希喂、小米、有哈PK

我的闺蜜最近向我大吐苦水,自从家里养了猫之后,她发现家里的空气质量大不如前。宠物的浮毛和排泄物的气味在空气中飘散,让她非常怀念以前没有养猫时家里清新的呼吸环境。她觉得这些漂浮的毛发和异味大大降低了居家的舒适度。 还引起了身体上…

容器:string

以下是对于string容器常用功能和函数的总结 主要包括 1、定义string 2、字符串赋值 3、字符串拼接:str.append() 4、字符串查找:str.find() / str.rfind() 5、字符串替换:str.replace() 6、字符串长度比较:str.compare…

Quartz定时任务组件

官网:http://www.quartz-scheduler.org/ 1)job - 任务 - 你要做什么事? 2)Trigger - 触发器 - 做什么事,什么时候触发,可以传入任务 3)Scheduler - 任务调度 - 可以传入多个触发器进行任务调…

ASUS/华硕天选Air 2021 FX516P系列 原厂win10系统

安装后恢复到您开箱的体验界面,带原机所有驱动和软件,包括myasus mcafee office 奥创等。 最适合您电脑的系统,经厂家手调试最佳状态,性能与功耗直接拉满,体验最原汁原味的系统。 原厂系统下载网址:http:…

Transformer教程之序列到序列模型(Seq2Seq)

在自然语言处理(NLP)的领域中,Transformer模型无疑是近年来最具革命性的方法之一。它的出现不仅大大提高了机器翻译、文本生成等任务的精度,还推动了整个深度学习研究的进步。本文将详细介绍Transformer模型中的序列到序列模型&am…

【Linux】性能分析器 perf 详解(一):简介、安装、stat命令演示

1、简介 perf 是由 Linux 官方提供的系统性能分析工具 。它包含两部分: perf_events ,Linux 内核中的一个子系统perf 命令,用户空间的应用程序内核子系统 perf_events 提供了性能计数器(hardware performance counters)和性能事件的支持,它以事件驱动型的方式工作,通过…

NVIDIA-NCCL下载资源分享,跳过Authenticator验证

目录 Authenticator进入下载页面Download NCCL 2.22.3, for CUDA 12.5, June 18th, 2024Local installers (x86)Network installers (x86)Local installers (ARM)Network installers (ARM) Download NCCL 2.22.3, for CUDA 12.4, June 18th, 2024Local installers (x86)Network…

如何实现高精度PCB切割?— 在线式激光切割机解决方案

在线式PCB精密激光切割机是一种专门用于电子行业中印刷电路板(PCB)切割的高精度设备。以下是关于在线式PCB精密激光切割机的详细信息和特点: 1. 工作原理: 在线式PCB精密激光切割机主要通过激光束的高能量密度对PCB板进行瞬时加热…

2024年客户体验的几个预测

数字化转型、以客户为中心的理念、数字技术的发展和产品的不断创新,都为客户体验带来了巨大的改变。 目前,我们看到很多公司都在致力于塑造一种以客户为中心的商业模式。企业开始用更多技术、更多数据和更多产品来强化自己在客户体验方面的能力。 那么&a…

应用DMAIC方法解决问题的注意事项有哪些?

在解决问题的过程中,DMAIC方法作为一种强大的工具,广泛应用于各类质量管理、流程改进以及持续优化的项目中。DMAIC代表定义(Define)、测量(Measure)、分析(Analyze)、改进&#xff0…

嵌入式应用开发屏幕教程8080并口通信

目录 #8080相关概念介绍 #8080并行通信硬件连接部分 #并行通信硬件电路连接图 #并行通信读数据规定 #并行通信写数据规定 #8080相关概念介绍 通信协议分为串行通信协议,并行通信协议,而本章所讲的8080是一种并行通信协议,并行通信协议 Pa…

FullScreen API与F11快捷键的相关问题排查与解决

前言 某个项目需要点击全屏按钮将页面中某个容器内的元素进行全屏显示便于用户操作,点击退出全屏时显示原来的页面内容 问题 1:指定元素全屏存在部分元素无法显示 记得之前看 FullScreen 相关API时有印象可以让某一元素直接全屏显示,随即…

视频技术朝着8K超高清方向发展,安防监控领域将迎来怎样变化?

一、背景 随着科技的日新月异,视频技术已逐渐成为我们日常生活中不可或缺的一部分。从娱乐、教育到安全监控,视频技术无处不在,并以其独特的方式影响着我们的生活方式。本文将探讨视频技术的发展趋势,并重点关注其在监控领域的应…

哨兵模式--哨兵节点的功能?

哨兵节点的主要功能有: 集群监控:监控 主、从节点的健康状况;自动切换主节点:当 Master 运行故障,哨兵启动自动故障恢复流程:从 slave 中选择一台作为新 master。通知:让 slave 执行 replicaof…

重磅!UOSDN焕新,开启创新之旅!

亲爱的开发者们 经过精心打磨和优化 全新改版的UOSDN(统信开发者支持网络) 已经正式上线啦! 我们致力于为您打造一个更加便捷、高效、富有创意和互动性的开发平台,详情👉https://uosdn.uniontech.com/ 以UOSDN作为载…

双向长短期记忆神经网络BiLSTM

先说一下LSTM LSTM 是一种特殊的 RNN,它通过引入门控机制来解决传统 RNN 的长期依赖问题。 LSTM 的结构包含以下几个关键组件: 输入门(input gate):决定当前时间步的输入信息对细胞状态的影响程度。遗忘门&#xff…

【深度学习】服务器炼丹代码配置、Python使用指定gpu显卡运行代码

【显卡】服务器炼丹代码配置 写在最前面一、查看哪几块显卡能用二、使用指定gpu运行代码1、指定使用GPU0运行脚本(默认是第一张显卡, 0代表第一张显卡的id,其他的以此类推)2、指定使用多张显卡运行脚本 三、如何使用1、单块显卡使用2、多GPU训练使用Data…