[MySQL]事务的浅谈

news2024/11/26 20:43:41

        欲买桂花同载酒 终不似 少年游        

目录

 1.MySQL为什么需要事务

2.MySQL对事务的支持

3.关于事务的操作

控制方式(对于单条SQL)

控制方式二(START TRANSACTION 或 BEGIN)

4.关于ACID

 5.关于事务的隔离级别

5.1事务可能存在的问题

5.2事务隔离级别

5.3难点(RR 级别 和 幻读问题) [仅供参考]

6.事务的实现原理

实现事务功能的三个技术如下:

实现事务采取了哪些技术以及思想?


 1.MySQL为什么需要事务

MySQL 支持事务的原因是,事务提供了一种机制,可以确保在多个操作之间维护数据的一致性和完整性。当多个用户同时访问数据库时,如果没有事务机制,可能会出现以下问题:

  • 数据丢失:如果两个用户同时修改同一条记录,最后一个提交的修改会覆盖掉之前的修改,导致数据丢失。

  • 数据不一致:如果多个操作需要修改多条记录,但是其中一条记录修改失败,那么其他记录的修改也将无法提交,导致数据不一致。

  • 并发访问问题:如果多个用户同时访问同一条记录,可能会出现读取过期数据或者写入数据冲突的情况,导致数据不正确。

通过使用事务机制,可以解决上述问题,确保多个操作之间的一致性和完整性。事务可以将多个操作视为一个整体,要么全部成功,要么全部失败,从而确保数据的正确性。

在 MySQL 中,事务是通过 ACID 原则来实现的.

因此,事务机制是数据库管理系统中非常重要的一部分,它可以确保数据库的数据完整性、一致性和可靠性。当多个用户同时对数据库进行操作时,事务机制可以保证每个操作都是独立的,并且不会相互干扰,从而保证数据的正确性。

2.MySQL对事务的支持

show engines;  //查看不同存储引擎的特性

可以看到,在 MySQL 中只有使用了 Innodb 数据库引擎才支持事务,MyISAM不支持。

3.关于事务的操作

控制方式(对于单条SQL)

SET AUTOCOMMIT=0;                    //SET AUTOCOMMIT=0 禁止自动提交
SET AUTOCOMMIT=1;                   //SET AUTOCOMMIT=1 开启自动提交
show variables like 'autocommit';    //查看事务的提交方式

  •  在mySQL中,事务默认是自动提交的(当然这和你的配置文件有关).
  •  对于InnoDB每一条SQL语言都默认封装成事务,自动提交。(select有特殊情况,因为
  • MySQL有MVCC)
  • 当设置 AUTOCOMMIT 为 0 时,MySQL 将关闭自动提交模式,即所有的 SQL 语句都不会自动提交到数据库中,而是需要显式地使用 COMMIT 命令来提交事务。        如果你忘记提交事务,那么这些 SQL 语句所做的修改将不会被保存到数据库中,从而导致数据的不一致。
  • 特别注意的是  当设置 AUTOCOMMIT 为 1 时,对于事务的控制方式二并不会产生任何影响,只要输入begin或者start transaction,事务便必须要通过commit提交,才会持久化,与是否设置set autocommit无关。

控制方式二(START TRANSACTION 或 BEGIN)

开启事务: START TRANSACTION 或 BEGIN ; 
提交事务: COMMIT; 
回滚事务: ROLLBACK;

更详细的控制语句(https://www.runoob.com/mysql/mysql-transaction.html)

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

COMMIT 也可以使用 COMMIT WORK,不过二者是等价的。COMMIT 会提交事务,并使已对数据库进行的所有修改成为永久性的;

ROLLBACK 也可以使用 ROLLBACK WORK,不过二者是等价的。回滚会结束用户的事务,并撤销正在进行的所有未提交的修改;

SAVEPOINT identifier,SAVEPOINT 允许在事务中创建一个保存点,一个事务中可以有多个 SAVEPOINT;

RELEASE SAVEPOINT identifier 删除一个事务的保存点,当没有指定的保存点时,执行该语句会抛出一个异常;

ROLLBACK TO identifier 把事务回滚到标记点;

SET TRANSACTION 用来设置事务的隔离级别。InnoDB 存储引擎提供事务的隔离级别有READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ 和 SERIALIZABLE。

4.关于ACID

原子性(Atomicity,或称不可分割性):

        一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。


一致性(Consistency):

        在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。


隔离性(Isolation,又称独立性):

        数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)


持久性(Durability):

        事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

 5.关于事务的隔离级别

5.1事务可能存在的问题

问题描述
脏读一个事务读到另一个事务还没提交的数据
不可重复读一个事务先后读取同一条记录,但两次读取的数据不同
幻读一个事务按照条件查询数据时,没有对应的数据行,但是再插入数据时,又发现这行数据已经存在

5.2事务隔离级别

  • 读未提交【Read Uncommitted】: 在该隔离级别,所有的事务都可以看到其他事务没有提交的执行结果。(实际生产中不可能使用这种隔离级别的),但是相当于没有任何隔离性,也会有很多并发问题,如脏读,幻读,不可重复读等
  • 读提交【Read Committed】 :该隔离级别是大多数数据库的默认的隔离级别(不是 MySQL 默认的)。它满足了隔离的简单定义:一个事务只能看到其他的已经提交的事务所做的改变。这种隔离级别会引起不可重复读,即一个事务执行时,如果多次 select, 可能得到不同的结果。
  • 可重复读【Repeatable Read】  MySQL 默认的隔离级别它确保同一个事务,在执行中,多次读取操作数据时,会看到同样的数据行。但是会有幻读问题。MySQL在RR级别的时候,是解决了幻读问题的(解决的方式是用Next-Key锁(GAP+行锁)解决的。
  • 串行化【Serializable】: 这是事务的最高隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决了幻读的问题。它在每个读的数据行上面加上共享锁。但是可能会导致超时和锁竞争(这种隔离级别太极端,实际生产基本不使用)
隔离级别脏读不可重复读幻读加锁读
Read Uncommitted (未提交读)不加锁
Read Committed (提交读)×不加锁
Repeatable Read(可重复读,默认方式)××

×

不加锁
Serializable (串行化)×××加锁
  • √表示在当前隔离级别下该问题会出现
  • Serializable 性能最低;Read uncommitted 性能最高,数据安全性最差

如和设置事务的隔离级别

查看事务隔离级别: SELECT @@TRANSACTION_ISOLATION; 
设置事务隔离级别: SET [ SESSION | GLOBAL ] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE }; SESSION 是会话级别,表示只针对当前会话有效,GLOBAL 表示对所有会话有效

5.3难点(RR 级别 和 幻读问题) [仅供参考]

这个问题比较复杂,我也做了一些小测试(),结论大概是这样的

mysql是仅第一次select(指快照读)的时候会创建 read view,而后的select就是建立在本会话和第一次select上面的了,所以从定义上是,mysql的是解决了幻读问题的,但是mysql 同时也支持当前读,这问题上面就仁者见仁智者见智了吧...

参考文章:

MySQL RR 与 幻读问题(实验 + 案例)_π大星的日常的博客-CSDN博客

MySQL的RR级别解决幻读问题了吗 - 掘金

6.事务的实现原理

实现事务功能的三个技术如下:

  1. 日志文件(redo log 和 undo log)
  2. MySQL锁技术
  3. 多版本并发控制MVCC(MultiVersion Concurrency Control)
    • 概念: InnoDB的 MVCC ,是通过在每行记录的后面保存两个隐藏的列来实现的。这两个列,一个保存了行的创建时间,一个保存了行的过期时间,当然存储的并不是实际的时间值,而是系统版本号。
    • 思想: 通过数据多版本来做到读写分离。从而实现不加锁读进而做到读写并行。

实现事务采取了哪些技术以及思想?

  • 原子性:使用 undo log, 从而达到回滚;
  • 持久性:使用 redo log,从而达到故障后恢复;
  • 隔离性:使用锁以及MVCC,运用的优化思想有读写分离,读读并行,读写并行;
  • 一致性:通过 原子性,持久性,隔离性 从而保证了事务的一致性

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

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

相关文章

Autosar RTE S/R接口implicit与Explicit的实现与区别

文章目录 前言接口的代码implicitIReadIWrite ExplicitReadWrite 区别与使用场景总结 前言 Autosar官方文档阅读起来比较费劲,一般从实际应用中来了解更多规范中的内容。本文介绍最常用的RTE S/R接口的implicit隐式与Explicit显式两种方式的实现与差别 接口的代码…

SSM + MySQL + Vue2.x + ElementU 图书管理系统(期末作业)

图书管理系统 项目介绍 🔥 SSM MySQL Vue2.x ElementUI 🔥 本项目使用 Idea 开发工具采用当前最火的Java Web前端框架开发,在保证质量的同时界面美观,交互友好,实在是期末大作业的首选项目。 软件架构 使用软…

HashMap源码详解

文章目录 简单介绍提出问题流程说明及验证put元素的流程怎样找到要存储的下标位置的?什么时候会扩容? 加载因子、阈值这些有什么含义?怎样扩容的?扩容的流程.链表可以转成红黑树, 那会从红黑树转成链表吗?什么时候会从链表转成红黑树 小总结 简单介绍 HashMap是Java中最最…

Metal入门学习:绘制纹理图片

一、编程指南PDF下载链接(中英文档) 1、Metal编程指南PDF链接 https://github.com/dennie-lee/ios_tech_record/raw/main/Metal学习PDF/Metal 编程指南.pdf 2、Metal着色语言(Metal Shader Language:简称MSL)编程指南PDF链接 https://github.com/dennie-lee/ios_te…

Linux服务器丨重测序数据分析常用软件安装指南

重测序分析软件安装指南 重测序(resequencing)是指对已知基因组进行高通量测序,以检测个体或种群的遗传变异,从而研究基因组的结构和功能。与全基因组测序不同,重测序通常只对一部分基因组进行测序,例如外显…

【2023 雷泽杯 · Misc】我是签到题

一道图片隐写题 目录 一、题目 二、思路 1.010editor查看源码 2.检索头部关键字段 3.图片隐写——高度隐写 一、题目 看不到这个图片对吧,这就是题目原本的样子。 二、思路 1.010editor查看源码 很明显的rar特征,尝试将后缀改成rar后打开。 发…

《Java就业班体系结构.pdf》:从入门到精通,掌握Java开发的终极指南,成为熟练高级开发者!

Java开发的终极指南 第1阶段:JAVA开篇第2阶段:JAVA语言语法第3阶段:集成开发工具的使用第4阶段:面向对象第5阶段:JavaSE进阶学习第6阶段:数据库JDBC第7阶段:前端精讲第8阶段:JavaEE第…

RocketMQ的学习历程(4)----消息处理 (2)

1.消费者的两种消费模式 顺序消费模式(Sequential Consumer Mode): 在顺序消费模式下,消息队列中的消息按照发送的顺序被消费者顺序消费。每个消息队列只会被一个消费者线程消费,确保消息的顺序性。这种模式适用于需要…

【Hadoop】三、数据仓库基础与Apache Hive入门

文章目录 三、数据仓库基础与Apache Hive入门1、数据仓库基本概念1.1、数据仓库概念1.2、场景案例:数据仓库为何而来1.3、数据仓库主要特征1.4、数据仓库主流开发语言--SQL 2、Apache Hive入门2.1、Apache Hive概述2.2、场景设计:如何模拟实现Hive功能2.…

深度学习用于医学预后-第二课第四周16-17节-比较两个患者的风险

我们怎样比较两个患者的风险? 让我们谈谈如何比较两名患者的风险。假设我们有两个病人,一个50岁,血压162,另一个61岁,血压140。 我们可以使用生存树首先找出他们所属的组。所以我们看到第一个病人的年龄小于60&#…

【CSS 选择器应用在QSS】第二天

CSS 选择器应用在QSS 【1】元素选择器(元素通用性)【2】id 选择器(唯一性)【2.1】CSS【2.2】QSS 【3】类选择器【3.1】CSS【3.2】QSS 【4】类选择器(只针对指定元素)【4.1】CSS【4.2】QSS 【5】通用选择器【…

iptables 防火墙二

目录 SNAT 原理与应用SNAT原理:修改数据包的源地址。 SNAT 实验DNAT原理与应用DNAT原理:修改数据包的目的地址。DNAT转换前提条件: DNAT 示例 SNAT 原理与应用 SNAT 应用环境:局域网主机共享单个公网IP地址接入Internet&#xff…

MyBatis技术练习

一、模仿教程练习增删改查&#xff0c;自己完成一个新表相关操作 1、配置fkxml文件 我们这里的增删改查sql语句必须对应我们自己创建的表 <?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.…

实测有效:由于找不到MSVCP140.dll,无法继续执行代码

从解决实际问题的角度上&#xff0c;推荐两种实测有效的方法。 先来说一下msvcp140.dll是什么&#xff1f; msvcp140.dll 是 Microsoft Visual C Redistributable for Visual Studio 2015 库文件的一部分。这个文件是一些需要 Visual Studio 2015 支持的程序所必需的。 如果…

(C语言版)力扣(LeetCode)题库1-5题解析

力扣&#xff08;LeetCode&#xff09;题库1-5题解析 1.两数之和题目解析 2.两数相加题目解法 3.无重复字符的最长字串题目解法 4. 寻找两个正序数组的中位数题目解法 5. 最长回文子串题目解法 结语 1.两数之和 题目 给定一个整数数组 nums 和一个整数目标值 target&#xff…

Java基础--->并发部分(3)【JUC、AQS】

文章目录 AQS&#xff08;AbstractQueuedSynchronizer&#xff09;AQS实现原理AQS操作重点方法 Java并发容器JUC&#xff08;java.util.concurrent&#xff09;ConcurrentHashMapCopyOnWriteArrayList AQS&#xff08;AbstractQueuedSynchronizer&#xff09; AbstractQueuedSy…

如何从其他ETL工具迁移到ETLCloud上?

ETL数据集成工具主要用于将来自不同数据源的数据整合到一个单一的、一致的数据存储库或将数据分发到不同的数据源中&#xff0c;同时也可以把数仓中的数据通过ETL反向输出给业务系统使用。它可以帮助企业解决数据共享问题&#xff0c;同时有效地管理和利用海量数据&#xff0c;…

DAY 61 MySQL高级SQL语句

高级SQL语句&#xff08;进阶查询&#xff09; 先准备2个表 一个location表 use market;create table location(Region char(20),Store_Name char(20));insert into location values(East,Boston);insert into location values(East,New York);insert into location values(W…

python数据可视化显示(附代码)

Python是一种非常流行的编程语言&#xff0c;具有广泛的应用领域&#xff0c;包括数据可视化。在数据可视化中&#xff0c;Python提供了多种工具来帮助用户创建各种类型的图表、图形和可视化效果。本文将介绍Python数据可视化的基本概念、工具和技术&#xff0c;并提供代码示例…

CustomTkinter:【二】颜色和主题、外观模式、缩放、包装

GitHub地址: https://github.com/TomSchimansky/CustomTkinter 官网&#xff1a; https://customtkinter.tomschimansky.com/ 官方教程文档&#xff1a;https://customtkinter.tomschimansky.com/documentation/ 目录 1、颜色和主题2 、外观模式3 、缩放4、包装 1、颜色和主题 …