广告
返回顶部
首页 > 资讯 > 数据库 >MySQL InnoDB 事务
  • 228
分享到

MySQL InnoDB 事务

2024-04-02 19:04:59 228人浏览 独家记忆
摘要

事务的定义 事务:数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作; 事务是一组不可再分割的操作集合(工作逻辑单元)。 典型事务使用场景:转账 Mysql 开启事务: mysql 默认是开启

事务的定义

事务:数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作; 事务是一组不可再分割的操作集合(工作逻辑单元)。

典型事务使用场景:转账

MySQL InnoDB 事务
Mysql 开启事务:

MySQL InnoDB 事务
mysql 默认是开启事务的,通过 SHOW VARIABLES like 'autocommit'; 可以查看 Mysql 的事务开启情况。

在 autocommit = ON(自动提交事务)的情况下,可以执行 BEGIN; 或者 START TRANSACTioN; 命令,改为手动提交事务,执行完 SQL 语句后,需要通过 COMMIT 命令提交事务,或者通过 ROLLBACK 命令回滚事务。
在 autocommit = OFF(手动提交事务)的情况下,执行完 SQL 语句后,需要通过 COMMIT 命令提交事务,或者通过 ROLLBACK命令回滚事务。
JDBC 编程

MySQL InnoDB 事务
测试命令:

MySQL InnoDB 事务
事务 ACID 特性

原子性(Atomicity):最小的工作单元,整个工作单元要么一起提交成功,要么全部失败回滚。

一致性(Consistency):事务中操作的数据及状态改变是一致的,即写入资料的结果必须完全符合预设的规则,不会因为出现系统意外等原因导致状态的不一致。

隔离型(Isolation):一个事务所操作的数据在提交之前,对其他事务的可见性设定(一般设定为不可见)。

持久性(Durability):事务所做的修改就会永久保存,不会因为系统意外导致数据的丢失。

参考(原子性和一致性的区别是什么?)这篇博文,讲了一下原子性和一致性的区别。

事务并发带来了哪些问题

脏读

MySQL InnoDB 事务MySQL InnoDB 事务
比如 user 表中有一条用户数据,执行了如下操作:

事务B更新 id=1 的数据,age 更新为18,不提交事务
事务A查询 id=1 的数据
事务B回滚刚才的更新操作
这个时候,事务A中查询出的 id=1 的数据,age 的值是16还是18?

不可重复读

MySQL InnoDB 事务
比如 user 表中有一条用户数据,执行了如下操作:

事务A查询 id=1 的数据
事务B更新 id=1 的数据,age 更新为18,并提交事务
事务A再次查询 id=1 的数据
这个时候,事务A两次查询出的 id=1 的数据,age 的值是16还是18?

幻读

MySQL InnoDB 事务
比如在 user 表中执行了如下操作:

事务A查询 age>15 的数据
事务B新增一条数据,age=22,并提交事务
事务A再次查询 age>15 的数据
这个时候,事务A两次查询出的数据,数量是1条还是2条?

事务四种隔离级别

SQL92 ANSI/ISO标准:Http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt

Read Uncommitted(未提交读) --未解决并发问题

事务未提交对其他事务也是可见的,脏读(dirty read)

Read Committed(提交读) --解决脏读问题

一个事务开始之后,只能看到自己提交的事务所做的修改,不可重复读(non repeatable read)

Repeatable Read(可重复读) --解决不可重复读问题

在同一个事务中多次读取同样的数据结果是一样的,这种隔离级别未定义解决幻读的问题

Serializable(串行化) --解决所有问题

最高的隔离级别,通过强制事务的串行执行

InnoDB 引擎对隔离级别的支持程度

MySQL InnoDB 事务
事务隔离级别的并发能力:未提交读 > 已提交读 > 可重复读 > 串行化

InnDB 引擎默认的事务隔离级别是可重复读(Repeatable Read),在该级别中它把幻读的问题也解决了。InnDB 中事务隔离级别通过mvcC 实现。

通过如下语句查看 InnoDB 的默认事务隔离级别:

MySQL InnoDB 事务MySQL InnoDB 事务
MySQL InnoDB 事务MySQL InnoDB 事务
通过如下语句设置 InnoDB 的事务隔离级别:

MySQL InnoDB 事务MySQL InnoDB 事务
接下来我们来测试一下 InnoDB 的默认事务隔离级别(Repeatable Read)是否解决了脏读、不可重复读、幻读的问题。

数据准备:

MySQL InnoDB 事务MySQL InnoDB 事务
是否解决了脏读的问题?

MySQL InnoDB 事务MySQL InnoDB 事务
开启两个 MySQL 客户端,模拟事务A和事务B的操作,执行步骤如下:

事务B开启手动事务,更新 id=1 的数据,age 更新为18,不提交事务
事务A查询 id=1 的数据
事务B回滚刚才的更新操作
图中的数字是执行步骤,通过下图可以看出事务A的执行结果是16,InnDB 的默认事务隔离级别完美的解决了脏读的问题。

MySQL InnoDB 事务MySQL InnoDB 事务
是否解决了不可重复读的问题?

MySQL InnoDB 事务MySQL InnoDB 事务
开启两个 MySQL 客户端,模拟事务A和事务B的操作,执行步骤如下:

事务A开启手动事务,查询 id=1 的数据
事务B更新 id=1 的数据,age 更新为18,并提交事务
事务A再次查询 id=1 的数据
图中的数字是执行步骤,通过下图可以看出事务A两次的执行结果都是16,没有受事务B更新操作的影响,InnDB 的默认事务隔离级别完美的解决了不可重复读的问题。

MySQL InnoDB 事务MySQL InnoDB 事务
是否解决了幻读的问题?

MySQL InnoDB 事务MySQL InnoDB 事务
开启两个 MySQL 客户端,模拟事务A和事务B的操作,执行步骤如下:

事务A开启手动事务,查询 age>15 的数据
事务B新增一条数据,age=22,并提交事务
事务A再次查询 age>15 的数据
图中的数字是执行步骤,通过下图可以看出事务A两次的执行结果都是一条数据,没有受事务B新增操作的影响,InnDB 的默认事务隔离级别完美的解决了幻读的问题。

MySQL InnoDB 事务MySQL InnoDB 事务

您可能感兴趣的文档:

--结束END--

本文标题: MySQL InnoDB 事务

本文链接: https://www.lsjlt.com/news/34868.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL InnoDB 事务
    事务的定义 事务:数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作; 事务是一组不可再分割的操作集合(工作逻辑单元)。 典型事务使用场景:转账 MySQL 开启事务: MySQL 默认是开启...
    99+
    2022-10-18
  • mysql - innoDB、事务、ACID特性
    参考:https://www.bilibili.com/video/BV1ui4y1w7C6from=search&seid=9894164453600625754   InnoDB具有事务,支持4个事务隔离级别,回滚,崩溃修复能力和多版本...
    99+
    2018-05-21
    mysql - innoDB 事务 ACID特性 数据库入门 数据库基础教程 数据库 mysql
  • MySQL innodb事务怎么实现
    在MySQL中,InnoDB存储引擎默认支持事务。要实现InnoDB事务,可以按照以下步骤进行:1. 确保数据库使用的是InnoDB...
    99+
    2023-10-09
    MySQL
  • MySQL innodb事务的实现方式
    这篇文章主要讲解了“MySQL innodb事务的实现方式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL innodb事务的实现方式”吧! &n...
    99+
    2022-10-18
  • MySQL InnoDB 事务锁源码分析
    目录1. Lock 与 Latch2. Repeatable Read3. Insert加锁流程3.1 lock mode3.2 加锁流程3.3 隐式锁4. Select 加锁流程本...
    99+
    2022-11-12
  • MySQL事务和InnoDB锁类型介绍
    这篇文章为大家带来有关MySQL事务和InnoDB锁类型的介绍。文章涵盖MySQL事务和InnoDB锁类型的知识点,希望大家通过这篇文章能有所收获。一、事务的隔离级别1、4 种隔离级别(1)未提交读(Rea...
    99+
    2022-10-18
  • MySQL InnoDB事务与锁的详细讲解
    这篇文章主要介绍“MySQL InnoDB事务与锁的详细讲解”,在日常操作中,相信很多人在MySQL InnoDB事务与锁的详细讲解问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解...
    99+
    2022-10-18
  • MySQL innodb引擎的事务执行过程
    通过这篇文章可以了解到下面几个问题 ...
    99+
    2022-10-18
  • MySQL innodb怎么设置事务隔离级别
    要设置MySQL InnoDB的事务隔离级别,可以使用以下步骤:1. 打开MySQL配置文件(通常位于/etc/my.cnf或/et...
    99+
    2023-10-09
    MySQL
  • mysql 5.5 innodb事务隔离级别之开篇
    小结:     1,事务隔离级别隶属于rdbms的acid之i,即隔离性     2,不同的事务隔离级别,导致一致性读的行为有所差异     ...
    99+
    2022-10-18
  • Mysql-InnoDB事物的示例分析
    这篇文章给大家分享的是有关Mysql-InnoDB事物的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。事物基本概念事物的特性(ACID)原子性 atomicity一致性 ...
    99+
    2022-10-18
  • MySQL:5.6 大事务show engine innodb status故障一例
    导读: 作者:高鹏(网名八怪),《深入理解MySQL主从原理32讲》系列文的作者。 今天遇到一个朋友的线上问题,大概意思就是说,我有一个线上的大事务大概100G左右,正在做回滚,当前看起来似乎影响了线上的业务,并且回滚很慢,是否可以减轻对线...
    99+
    2021-04-04
    MySQL:5.6 大事务show engine innodb status故障一例
  • Mysql Innodb事务隔离级别指的是什么
    小编给大家分享一下Mysql Innodb事务隔离级别指的是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Mysql的事务隔...
    99+
    2022-10-18
  • InnoDB 事务加锁分析
    本文首发于 vivo互联网技术 微信公众号  链接:https://mp.weixin.qq.com/s/S7MhlsZveBHRSQhq5aTIJA 作者:何志创 一般大家对数据库事务的了解可能停...
    99+
    2022-10-18
  • MySQl事务面试整理(基于InnoDB存储引擎)
    最近看了很多关于事务问题的博客,感觉看的好混乱,没有一个整体的架构来谈事务; 所以就根据自己的见解谈一谈关于事务的问题。 1.事务四大特征(ACID) 众所周知,事务的四大特性即原子性,持久性,隔离性和一致性, 一致性是事务的最终目的,而...
    99+
    2021-04-15
    MySQl事务面试整理(基于InnoDB存储引擎)
  • MySQL InnoDB如何保证事务特性示例详解
    前言 如果有人问你“数据库事务有哪些特性”?你可能会很快回答出原子性、一致性、隔离性、持久性即ACID特性。那么你知道InnoDB如何保证这些事务特性的吗?如果知道的话这篇文章就可以直接跳过不看啦(#^.^...
    99+
    2022-10-18
  • 一文快速搞懂MySQL InnoDB事务ACID实现原理
    【51CTO.com原创稿件】说到数据库事务,想到的就是要么都做修改,要么都不做,或者是 ACID 的概念。其实事务的本质就是锁、并发和重做日志的结合体。 这一篇主要讲一下 InnoDB 中的事务到底是如何...
    99+
    2022-10-18
  • MySQL事务数据库(InnoDB类型)的安装方法(转)
    MySQL事务数据库(InnoDB类型)的安装方法(转)[@more@]MySQL数据库分二种类型,一种是传统的数据表格式,一种是支持事务处理的数据表格式(InnoDB,BDB,其中以InnoDB为主),下...
    99+
    2022-10-18
  • (7)MySQL进阶篇SQL优化(InnoDB锁-事务隔离级别 )
    1.概述 在我们在学习InnoDB锁知识点之前,我觉得有必要让大家了解它的背景知识,因为这样才能让我们更系统地学习好它。InnoDB与MyISAM的最大不同有两点:一是支持事务(TRANSACTION);二是采用了行级锁。行级锁与表级锁本...
    99+
    2020-10-31
    (7)MySQL进阶篇SQL优化(InnoDB锁-事务隔离级别
  • ⑩⑧【MySQL】InnoDB架构、事务原理、MVCC多版本并发控制
    个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ InnoDB存储引擎 ⑩⑧【MySQL】详解I...
    99+
    2023-12-22
    mysql 架构 数据库 MVCC 事务 并发
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作