Mysql数据库之事务(山高水远,他日江湖再见)

news2024/9/23 19:15:26

文章目录

  • 一、事务的概念
  • 二、事务的ACID特点
    • 1.原子性(Atomicity)
    • 2.一致性(Consistency)
    • 3.隔离性(lsolation)
    • 4.持久性(Durability)
  • 三、并发访问表的一致性问题和事务的隔离级别
    • 1.并发访问表的一致性问题
      • (1)脏读
      • (2)不可重复读
      • (3)幻读
    • 2.事务的隔离级别
      • (1)未提交读(Read Uncommitted (RU))
      • (2)提交读(Read Committed (RC))
      • (3)可重复读(Repeatable Read (RR))
      • (4)串行读(serializable)
    • 3.数据库默认隔离级别
    • 4.事务隔离级别的范围和查看方式
      • (2)查看全局事务隔离级别
      • (3)查看会话事务隔离级别
      • (4)修改全局事务隔离级别
      • (5)修改会话事务隔离级别
  • 四、事务控制语句
    • 1.显式地开启一个事务
    • 2. 提交事务,并使已对数据库进行的所有修改变为永久性的
    • 3.回滚会结束用户的事务,并撤销正在进行的所有未提交的修改
    • 4. 在事务中创建一个回滚点
    • 5. 把事务回滚到标记点
  • 五、修改自动提交参数
    • 1.数据库中临时修改
    • 2.永久修改

一、事务的概念

是一种机制、一个操作序列,包含了一组数据库操作命令,并且把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么都执行,要么都不执行。
是一个不可分割的工作逻辑单元,在数据库系统上执行并发操作时,事务是最小的控制单元。
适用于多用户同时操作的数据库系统的场景,如银行、保险公司及证券交易系统等等。
通过事务的整体性以保证数据的一致性。

二、事务的ACID特点

1.原子性(Atomicity)

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

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

2.一致性(Consistency)

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

  • 在事务开始前,数据库中存储的数据处于一致状态;
  • 当事务完成后,数据也必须处于一致状态。

3.隔离性(lsolation)

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

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

4.持久性(Durability)

在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。指不管系统是否发生故障,事务处理的结果都是永久的。一旦事务被提交,事务的效果会被永久地保留在数据库中。
总结:在事务管理中,原子性是基础,隔离性是手段,一致性是目的,持久性是结果。

三、并发访问表的一致性问题和事务的隔离级别

1.并发访问表的一致性问题

(1)脏读

当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。(即一个事务能看到另一个事务未提交的数据)

(2)不可重复读

指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不可重复读。(即由于一个事务中途修改使另一个事务多次读取不能读到相同的数据内容)

(3)幻读

一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,另一个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,操作前一个事务的用户会发现表中还有没有修改的数据行,就好像发生了幻觉一样。(即一个事务明明修改了多行数据记录,但由于另一个数据的影响,却导致发现有数据记录未被修改)

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

2.事务的隔离级别

事务的隔离级别决定了事务之间可见的级别。MysQL事务支持如下四种隔离,用以控制事务所做的修改,并将修改通告至其它并发的事务。

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

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

(2)提交读(Read Committed (RC))

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

(3)可重复读(Repeatable Read (RR))

确保如果在一个事务中执行两次相同的SELECT语句,都能得到相同的结果,不管其他事务是否提交这些修改。(可以防止脏读和不可重复读)

(4)串行读(serializable)

相当于锁表
完全串行化的读,将一个事务与其他事务完全地隔离。每次读都需要获得表级共享锁,读写相互都会阻塞。(可以防止脏读,不可重复读取和幻读;但事务串行化会降低数据库的效率)

3.数据库默认隔离级别

Mysql 默认的隔离级别是 Repeatable Read (RR)。
Oracle 和 SQL Server 的默认隔离级别是 Read Committed (RC)。

4.事务隔离级别的范围和查看方式

(1)范围分类
全局级:对所有的会话有效
会话级:只对当前的会话有效

(2)查看全局事务隔离级别

SHOW GLOBAL VARIABLES LIKE ‘%isolation%’; 或 SELECT @@global.tx_isolation;

在这里插入图片描述
在这里插入图片描述

(3)查看会话事务隔离级别

SHOW SESSION VARIABLES LIKE ‘%isolation%’; 或 SELECT @@session.tx_isolation;

在这里插入图片描述
在这里插入图片描述

(4)修改全局事务隔离级别

SET GLOBAL TRANSACTION ISOLATION LEVEL 隔离级别名;

在这里插入图片描述

(5)修改会话事务隔离级别

SET SESSION TRANSACTION ISOLATION LEVEL 隔离级别名;

在这里插入图片描述

注意:设置会话隔离级别只在当前会话有效,退出会话重新连接,会话隔离等级依然会恢复为和全局隔离级别相同。

在这里插入图片描述

四、事务控制语句

1.显式地开启一个事务

BEGIN; 或 START TRANSACTION;

2. 提交事务,并使已对数据库进行的所有修改变为永久性的

COMMIT; 或 COMMIT WORK;

3.回滚会结束用户的事务,并撤销正在进行的所有未提交的修改

ROLLBACK; 或 ROLLBACK WORK;

4. 在事务中创建一个回滚点

SAVEPOINT 回滚点名称

5. 把事务回滚到标记点

ROLLBACK TO 回滚点名称
注意:不同于ROLLBACK,回滚到指定回滚点后,并没有提交,需要额外执行 COMMIT 才能提交到数据库中。

五、修改自动提交参数

1.数据库中临时修改

SET autocommit=1; 代表开启

SET autocommit=0; 代表关闭

在这里插入图片描述
在这里插入图片描述

2.永久修改

修改/etc/my.cnf 在[mysqld] 下添加

[mysqld]
autocommit=1    开启
#autocommit=0    关闭

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

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

相关文章

融合模型stacking14条经验总结和5个成功案例(互联网最全,硬核收藏)_机器学习_人工智能_模型竞赛_论文参考

我看了很多关于融合模型stacking文章,很多作者倾向于赞美融合模型stacking,对其缺点轻描淡写,这容易误导初学者。一叶障目就是这意思。 我的很多学员喜欢用融合模型作为论文或专利创新点,这是一个热门技术。 最近有个同学在论文…

设计模式之单例模式笔记

设计模式之单例模式笔记 说明Singleton(单例)目录单例模式之饿汉式-静态成员变量写法测试类 单例模式之饿汉式-静态代码块写法测试类 单例模式之懒汉式-线程不安全写法和线程安全写法测试类 单例模式之懒汉式-双重检查锁方式(推荐使用的方式)单例模式之懒汉式-静态内部类方式(推…

Mysql数据库之存储引擎(羡慕她人,不如提升自己)

一、存储引擎概念 MySQL中的数据用各种不同的技术存储在文件中,每一种技术都使用不同的存储机制、索引技巧、锁定水平并最终提供不同的功能和能力,这些不同的技术以及配套的功能在MySQL中称为存储引擎。 存储引擎是MySQL将数据存储在文件系统中的存储方…

ELK日志收集系统简述

一、概述 (一)ELK由三个组件构成 ELK是三个开源软件的缩写,分别是Elasticsearch、Logstash、Kibana ELK 架构基本组成 (二)作用 1、日志收集 2、日志分析 3、日志可视化 (三)为什么使用EL…

计网之应用层

因特网协议概述 常用协议应用层HTTP(超文本传输协议)、FTP(文件传输协议)、SMTP(简单邮件传输协议)、DNS(域名系统)、DHCP(动态主机配置协议)、SNMP&#xff…

15-6.自定义组件的代码共享

在微信小程序中使用 behaviors 进行代码共享,功能类似于vue的mixins 每个behavior可以包含一组属性、数据、生命周期函数和方法 每个组件可以引用多个behavior,behavior也可以引用其他的behavior 目录 1 创建behavior 2 使用behavior 3 behavio…

机器学习融合模型stacking14条经验总结和5个成功案例(互联网最全,硬核收藏)

我看了很多关于融合模型stacking文章,很多作者倾向于赞美融合模型stacking,对其缺点轻描淡写,这容易误导初学者。一叶障目就是这意思。 我的很多学员喜欢用融合模型作为论文或专利创新点,这是一个热门技术。 最近有个同学在论文…

MySQL:七种 SQL JOINS 的实现(图文详解)

MySQL:7种SQL JOINS的实现 前言一、图示表示二、代码举例1、INNER JOIN(内连接)2、LEFT JOIN(左连接)3、RIGHT JOIN(右连接)4、OUTER JOIN(全连接)5、LEFT EXCLUDING JOI…

微信小程序入门学习02-TDesign中的自定义组件

目录 1 显示文本2 自定义组件3 变量定义4 值绑定总结 我们上一篇讲解了TDesign模板的基本用法,如何开始阅读模板。本篇我们讲解一下自定义组件的用法。 1 显示文本 官方模板在顶部除了显示图片外,还显示了一段文字介绍。文字是嵌套在容器组件里&#xf…

数据库的操作

前言 在之前的文章中,我们已经了解了什么是数据库,以及为什么有数据库,和数据库有什么作用,有了这些宏观概念之后,本章为大家进一步详细介绍对于数据库在Linux上如何具体操作。 1.创建数据库 1.1创建数据库语法 语法…

读书:《敏捷软件开发工具----精益开发方法》

《敏捷软件开发工具----精益开发方法》(Lean Software Development: An Agile Toolkit)由Mary Poppendieck和Tom Poppendieck合著,2003年出版,尽管已经有20个年头了,但书中的理念和方法仍然具有很高的实践价值&#xf…

SpringBoot2概览-运维实用篇

知识点 使用SpringBoot提供的maven插件可以将工程打包成可执行jar包然后执行&#xff0c;即java –jar xxx.jar&#xff0c;下面的图是MANIFEST.MF文件的内容&#xff1a; <build><plugins><plugin><groupId>org.springframework.boot</groupId>…

【MySQL】如何速通MySQL(3)

&#x1f4cc;前言&#xff1a;本篇博客介绍如何速通MySQL的第二篇&#xff0c;主要介绍Mysql中主要的基础的入门&#xff0c;学习MySQL之前要先安装好MySQL&#xff0c;如果还没有安装的小伙伴可以看看博主前面的博客&#xff0c;里面有详细的安装教程。或者看一下下面这个链接…

136-nago

PEID查看你程序有没有壳&#xff0c;发现是汇编语言程序 打开程序&#xff0c;我们发现程序是由Nag提示窗口的。 我们先进行去Nag提示。 进入回调函数&#xff0c;进行分析 保存修改到文件。 重新打开文件&#xff0c;我们发现没有Nag窗口。 再次使用OD进行附加进行分析。…

项目中遇到的问题总结(四)

GateWay和Nginx的相同点和不同点在哪里&#xff1f; Gateway 和 Nginx 都是常见的反向代理服务器&#xff0c;它们的相同点和不同点如下&#xff1a; 相同点&#xff1a; 都可以作为反向代理服务器&#xff0c;接收来自客户端的请求并转发到后端服务器进行处理。 都支持负载均…

67、C#调用Visual Studio 2019生成的Paddle+OCR(使用ncnn库),去完成业务任务

基本思想&#xff1a;这里使用飞哥写的android代码&#xff0c;将其取出纯c代码逻辑&#xff0c;自己尝试转了paddleocr模型&#xff0c;可以成功转换&#xff0c;不在详细阐述生成ncnn模型的过程和写后处理ocr识别过程&#xff0c;这里要实现的目的是使用c#调用ncnn的ocr工程&…

Ps修改文字

第一步&#xff1a;打开ps软件&#xff0c;选择菜单栏“文件”中的“打开”选项。 第二步&#xff1a;在弹出的“打开”对话框中&#xff0c;选择一张需要修改文字的图片&#xff0c;单击“打开”按钮。 第三步&#xff1a;在左侧工具栏中&#xff0c;选择“仿制图章工具”。 第…

【Python 随练】输出 9*9 口诀

题目&#xff1a; 输出 9*9 口诀 简介&#xff1a; 在本篇博客中&#xff0c;我们将使用 Python 代码输出 9*9 口诀表。口诀表是一个常见的数学乘法表格&#xff0c;用于展示从 1 到 9 的乘法结果。我们将给出问题的解析&#xff0c;并提供一个完整的代码示例来生成这个口诀…

全志V3S嵌入式驱动开发(USB camera驱动)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 soc和mcu的一个重要区别&#xff0c;就是soc会涉及到大量的音视频操作&#xff0c;当然音视频也就包括了camera摄像头这部分。v3s本身支持csi接口和…

webpack优化代码运行之Code split

一、 什么是code split Webpack的code split是一种技术&#xff0c;它能够将代码分割成多个块&#xff0c;从而优化应用程序的性能。这样做可以实现按需加载和并行加载&#xff0c;从而减少初始化时间和请求次数。Code split在Webpack中通过使用entry语法和各种Loader和插件来…