mysql 事务基本介绍

目录

命令小结

一      MySQL事务的概念

(一)事务介绍

(二)事务特点

(三)事务的ACID特点

1,原子性

1.1 原子性具体形容

1.2 原子性案例

2 ,一致性

2.1一致性具体介绍

2.2 一致性案例

3,隔离性 

3.1 隔离性具体介绍

4 ,持久性

4.1 持久性具体介绍

二    事务之间的相互影响

(一)脏读(读取未提交数据)

1,脏读定义

2,案例

(二)不可重复读(前后多次读取,数据内容不一致)

1,不可重复读定义

(三)幻读(前后多次读取,数据总量不一致)

1,幻读定义

(四)丢失更新

1,丢失更新定义

2,案例

(五)不可重复读 和幻读区别

(六)总结

三    Mysql及事务隔离级别(四种)

(一)read uncommitted  未授权读取

(二)Read Committed   授权读取

(三)Repeatable Read   可重复读取

(四)Serializable 串行化

四  事务隔离级别的作用范围

(一)查询全局事务隔离级别

(二)查询会话事务隔离级别

(三)设置全局事务隔离级别

(四)设置会话事务隔离级别

五    事务控制语句

(一)开启事务

(二)提交事务

(三)回滚

(四)设置回滚点

(五)回滚到回滚点

(六)实例回滚

​六   使用 set 设置控制事务

(一)命令

(二)注意事项


命令小结

show global variables like '%isolation%';
 
查询全局事务隔离级别
 
show session variables like '%isolation%';
 
查询会话事务隔离级别
 
set global transaction isolation level read committed;
 
设置全局事务隔离级别
 
set session transaction isolation level read committed;
 
设置会话事务隔离级别
 
BEGIN显式地开启一个事务
COMMIT提交事务,并使已对数据库进行的所有修改变为永久性的
ROLLBACK回滚会结束用户的事务,并撤销正在进行的所有未提交的修改。
 
SAVEPOINT S1

使用 SAVEPOINT 允许在事务中创建一个回滚点,一个事务中可以有多个 SAVEPOINT;“S1”代表回滚点名称。

ROLLBACK TO [SAVEPOINT] S1把事务回滚到标记点。
 
SET AUTOCOMMIT=0;#禁止自动提交
SET AUTOCOMMIT=1;开启自动提交,Mysql默认为1
SHOW VARIABLES LIKE 'AUTOCOMMIT';查看Mysql中的AUTOCOMMIT值
 

一      MySQL事务的概念

(一)事务介绍

 MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中, 要删除一个人员,即需要删除人员的基本资料,又需要删除和该人员相关的信息,如信箱, 文章等等。这样,这些数据库操作语句就构成一个事务!
 

(二)事务特点

●事务是一种机制、一个操作序列,包含了一组数据库操作命令,并且把所有的命令作为一个整体           一起向系统提交或撤销操作请求,即这一组数据库命令要么都执行,要么都不执行。

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

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

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

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

(三)事务的ACID特点

ACID,是指在可靠数据库管理系统(DBMS)中,事务(transaction)应该具有的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。这是可靠数据库所应具备的几个特性。

1,原子性

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

1.1 原子性具体形容

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

1.2 原子性案例

A给B转帐100元钱的时候只执行了扣款语句,就提交了,此时如果突然断电,A账号已经发生了扣款,B账号却没收到加款,在生活中就会引起纠纷。这种情况就需要事务的原子性来保证事务要么都执行,要么就都不执行。

2 ,一致性

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

2.1一致性具体介绍

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

2.2 一致性案例

案例:
对银行转帐事务,不管事务成功还是失败,应该保证事务结束后表中A和B的存款总额跟事务执行前一致。
 

3,隔离性 

指在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。

3.1 隔离性具体介绍

对数据进行修改的所有并发事务是彼此隔离的,表明事务必须是独立的,它不应以任何方式依赖于或影响其他事务。
修改数据的事务可在另一个使用相同数据的事务开始之前访问这些数据,或者在另一个使用相同数据的事务结束之后访问这些数据。
 

4 ,持久性

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

4.1 持久性具体介绍

指不管系统是否发生故障,事务处理的结果都是永久的。
一旦事务被提交,事务的效果会被永久地保留在数据库中。

二    事务之间的相互影响

(一)脏读(读取未提交数据)

1,脏读定义

脏读指的是读到了其他事务未提交的数据,未提交意味着这些数据可能会回滚,也就是可能最终不会存到数据库中,也就是不存在的数据。读到了并一定最终存在的数据,这就是脏读

2,案例

比如事务B执行过程中修改了数据X,在未提交前,事务A读取了X,而事务B却回滚了,这样事务A就形成了脏读。 也就是说,当前事务读到的数据是别的事务想要修改成为的但是没有修改成功的数据。

(二)不可重复读(前后多次读取,数据内容不一致)

1,不可重复读定义

个事务内两个相同的查询却返回了不同数据。这是由于查询时系统中其他事务修改的提交而引起的。
 

(三)幻读(前后多次读取,数据总量不一致)

1,幻读定义

一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,另一个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,操作前一个事务的用户会发现表中还有没有修改的数据行,就好象发生了幻觉一样。

(四)丢失更新

1,丢失更新定义

两个事务同时读取同一条记录,A先修改记录,B也修改记录(B不知道A修改过),B提交数据后B的修改结果覆盖了A的修改结果。

2,案例

A B 同时修改 一个数据

A B 先后提交事务 B 会覆盖A 的数据

(五)不可重复读 和幻读区别

  • 发生的原因不同。不可重复读主要是由于在同一个事务内,其他事务对数据进行了修改(如更新或删除)操作,导致事务内多次读取同一数据时,得到的结果不一致。而幻读则主要是由于在同一个事务内,其他事务插入了新的满足查询条件的数据,或者在事务执行过程中,有数据被删除,导致再次执行相同的查询时,得到的结果集与之前不同。

  • 表现形式不同。不可重复读关注的是单个数据行的内容变化,即事务内多次读取同一数据行的值,可能因为其他事务的修改而有所不同。而幻读关注的是数据行的增加或减少,即在事务内多次查询满足条件的记录集时,可能因为其他事务插入了新的满足条件的数据行或者删除了某些数据行,而导致查询结果集的改变。

即不可重复读 是前后读取 看到数据内容不一致

   幻读            是前后读取 看到数据总量不一致

(六)总结

三    Mysql及事务隔离级别(四种)

(一)read uncommitted  未授权读取

允许脏读取,即一个事务可以读取到另一个未提交事务修改的数据。但同时,不允许更新丢失

安全性最差   但性能最好 (不使用)

(二)Read Committed   授权读取

允许不可重复读取,即一个事务只能读取已经提交的数据。这样可以避免脏读问题,但仍然可能存在不可重复读和幻读问题。

安全性较差  性能较好  (oracle 数据库 默认就是这种)

(三)Repeatable Read   可重复读取

在这个级别下,一个事务在执行过程中多次读取相同的数据时,能够保证数据不会被其他事务修改。这可以避免脏读和不可重复读,但仍然可能存在幻读问题。

可以解决脏读 和 不可重复读 —mysql默认的
可重复读。无论其他事务是否修改并提交了数据,在这个事务中看到的数据值始终不受其他事务影响
安全性较高,性能较差 (mysql 默认的就是这种)

(四)Serializable 串行化

这是最高的隔离级别,事务会按顺序一个接一个地执行,不允许并发执行。这可以避免脏读、不可重复读和幻读等并发问题,但会降低系统的并发性能

安全性高  性能差   不使用
 

四  事务隔离级别的作用范围

全局级:对所有的会话有效
会话级:|只对当前的会话有效

(一)查询全局事务隔离级别

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 session transaction isolation level read committed;

五    事务控制语句

(一)开启事务

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

(二)提交事务

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

(三)回滚

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

(四)设置回滚点

SAVEPOINT S1:使用 SAVEPOINT 允许在事务中创建一个回滚点,一个事务中可以有多个 SAVEPOINT;“S1”代表回滚点名称。

(五)回滚到回滚点

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

(六)实例回滚

1 创建数据库 

2 创建表


3,原始表数据如下:

4,begin  开启事务

5,设置回滚点1

6,插入 貂蝉数据

7,设置回滚点2

8,插入文丑  数据

9,目前 表数据

10,  回到 回滚点2

11, 回到回滚点1

六   使用 set 设置控制事务

(一)命令

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

(二)注意事项

如果没有开启自动提交,当前会话连接的mysql的所有操作都会当成一个事务直到你输入rollback|commit;当前事务才算结束。当前事务结束前新的mysql连接时无法读取到任何当前会话的操作结果。
如果开起了自动提交,mysql会把每个sql语句当成一个事务,然后自动的commit。
当然无论开启与否,begin; commit|rollback; 都是独立的事务。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Cubemx串口配置

1.时钟 2.引脚配置 3.重写printf代码 /* USER CODE BEGIN 1 */ int __io_putchar(int ch){HAL_UART_Transmit(&huart1,(uint8_t *) ch, 1,1000);return ch; } /* USER CODE END 1 */

JavaEE 初阶篇-深入了解进程与线程(常见的面试题:进程与线程的区别)

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 进程概述 2.0 线程概述 2.1 多线程概述 3.0 常见的面试题:谈谈进程与线程的区别 4.0 Java 实现多线程的常见方法 4.1 实现多线程方法 - 继承 Thread 类…

含“AI”量上涨,智能模组SC208系列助力智慧零售全场景高质发展

AI正重塑智慧零售产业,加速零售在采购、生产、供应链、销售、服务等方面改善运营效率和用户体验。零售行业经历了从线下到线上再到全渠道融合发展过程,“提质、降本、增效、高体验”是亘古不变的商业化与智能化方向。含“AI”量逐渐上涨的智慧零售正经历…

【Pt】新建项目时的设置

新建项目时需要在如下界面做一些设置。 一、模板与文件 模板通常选择“PBR - Metallic Roughness Alpha-blend” 文件可以选择fbx,abc,obj等格式的三维模型文件 二、项目设置 2.1 文件分辨率 指的是在软件中的预览效果,分辨率越高预览效果…

RUST egui体验

egui官方提供了web版的demo&#xff0c;效果还是很不错的&#xff0c;就是用的时候有点一头雾水&#xff0c;没有找到明确的指导怎么把这些组件插入到自己的application或者web。花了一天时间撸了一遍流程&#xff0c;记录一下&#xff0c;说不定以后能用到呢 >_< efram…

Redis学习二--常见问题及处理

基本概念 Redis基本概念数据结构 机制 持久化机制&#xff1a; RDB(内存快照)&#xff1a;某一时刻的内存快照以二进制的方式写入磁盘&#xff0c;可以手动触发和自动触发。 优点&#xff1a;生成文件小&#xff0c;恢复速度快&#xff0c;适用于灾难恢复。 缺点&#xff1a…

如何与施耐德Schneider建立EDI连接?

EDI基础知识 何为EDI&#xff1f;是一个软件、系统还是一种流程呢&#xff1f;准确来说&#xff0c;EDI全称Electronic Data Interchange&#xff0c;中文名称是电子数据交换&#xff0c;也被称为“无纸化贸易”。EDI是&#xff1a; 标准化的数据格式连接业务系统间的数据桥梁…

Verilog刷题笔记40

题目&#xff1a; For the following Karnaugh map, give the circuit implementation using one 4-to-1 multiplexer and as many 2-to-1 multiplexers as required, but using as few as possible. You are not allowed to use any other logic gate and you must use a and …

vite脚手架生成vue项目及其配置

认识脚手架 脚手架就是为了快速生成可复用代码的工具&#xff0c;帮你配置好开发过程中要用到的工具和环境&#xff0c;更快更方便地做开发写业务 vite和cli脚手架区别 可参考博主文章&#xff1a; Vue脚手架&#xff08;cli和vite详解&#xff09;_vite和vuecli-CSDN博客 …

JVM的知识

什么是JVM 1.JVM&#xff1a; JVM其实就是运行在 操作系统之上的一个特殊的软件。 2.JVM的内部结构&#xff1a; &#xff08;1&#xff09;因为栈会将执行的程序弹出栈。 &#xff08;2&#xff09;垃圾99%的都是在堆和方法区中产生的。 类加载器&#xff1a;加载class文件。…

花生壳 | ubuntu安装和卸载花生壳

一、到花生壳官网下载linux版本的花生壳 一般下载到Downlaods文件夹 进入文件夹 dpkg -i phddns_5_1_amd64.deb #安装花生壳 dpkg -r phddns #卸载花生壳 登录花生壳管理网站 http://b.oray.com 在Ubuntu中输入命令查看sn码&#xff0c;默认密码为admin phddns status …

年龄大了转嵌入式有机会吗?

有老铁说&#xff0c;我28了&#xff0c;转嵌入式还来得及吗&#xff1f; 其实这个是因人而异的&#xff0c;没有固定说超过多少岁&#xff0c;就不能转了。 我一般不太建议30及以上的转行&#xff0c;第一是30岁才从开始做技术&#xff0c;感觉意义不大。第二是难度大&#xf…

淡旺季酒店价格波动太大,住宿费用怎么管?

受地理位置、季节等因素的影响&#xff0c;部分城市不同季节的酒店价格浮动较大。一线还是二线城市&#xff1f;是淡季还是旺季&#xff1f;价格差距之间可以说是天差地别。 在淡季出差时&#xff0c;按照旺季的标准会导致成本过高&#xff0c;造成资源的浪费。而在旺季出差时&…

python+requests接口自动化测试实战

环境说明&#xff1a; 1.WIN 7, 64位 2.Python3.4.3 &#xff08;pip-8.1.2&#xff09; 3.Requests —>pip install requests 4.Unittest —>unittest 框架是python自带的单元测试框架&#xff0c;python2.1及其以后的版本已将unittest作为一个标准块放入python开发包中…

【GPT概念-03】:人工智能中的注意力机制

说明 注意力机制生成分数&#xff08;通常使用输入函数&#xff09;&#xff0c;确定对每个数据部分的关注程度。这些分数用于创建输入的加权总和&#xff0c;该总和馈送到下一个网络层。这允许模型捕获数据中的上下文和关系&#xff0c;而传统的固定序列处理方法可能会遗漏这…

LeetCode:2617. 网格图中最少访问的格子数(优先级队列 Java)

目录 2617. 网格图中最少访问的格子数 题目描述&#xff1a; 实现代码与解析&#xff1a; 优先级队列 原理思路&#xff1a; 2617. 网格图中最少访问的格子数 题目描述&#xff1a; 给你一个下标从 0 开始的 m x n 整数矩阵 grid 。你一开始的位置在 左上角 格子 (0, 0) 。…

C语言数据结构基础————二叉树学习笔记(四)简单的OJ题目练习

1.单值二叉树 965. 单值二叉树 - 力扣&#xff08;LeetCode&#xff09; 建立一个新的函数&#xff0c;用函数传参的方法来记录val的值 如上一篇最后的对称二叉树的习题&#xff0c;建立新的函数来传参 多采用使用反对值的方法&#xff0c;因为如果是相等return true的话&am…

芯片公司SAP管理架构:科技与管理的完美融合

在当今日新月异的科技时代&#xff0c;芯片公司作为信息技术领域的核心力量&#xff0c;其运营管理的复杂性日益凸显。SAP管理架构作为一种高效的企业资源规划系统&#xff0c;为芯片公司提供了强大的管理支持。本文将为您科普芯片公司SAP管理架构的相关知识。 SAP管理架构是一…

leetcode每日一题1969

目录 一.题目原型&#xff1a; 二思路解析&#xff1a; 三.代码实现: 一.题目原型&#xff1a; 二思路解析&#xff1a; 灵神的做法非常让人惊叹&#xff1a; 理解就是&#xff0c;如果一个数大于另一个数要交换的1的权重&#xff0c;那么他们的乘积就变小。 那么一个大的数…

React 中的懒加载(Lazy Load)

React 中的懒加载&#xff08;Lazy Load&#xff09; 在大型的 React 应用中&#xff0c;为了提高页面加载速度和性能&#xff0c;我们经常会使用懒加载技术来延迟加载组件或资源。懒加载可以将页面初始加载的内容减少到最小&#xff0c;只在需要时再动态加载额外的组件或资源…