『 MySQL篇 』:MySQL 事务特性

这篇具有很好参考价值的文章主要介绍了『 MySQL篇 』:MySQL 事务特性。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一 . 什么是事务?

二.  事务的操作

​三.  事务的四大特性

四 . 并发事务可能产生的问题

五 . 数据库的隔离级别


一 . 什么是事务?

从概念上来讲,事务是一个有限的数据库操作序列构成,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位 。

举个例子:假如 A 向 B 转账 100 元,先从 A 的账户中扣除100元,再在 B 的账户中增加 100 元,如果已经在 A 帐户中扣除100元,还没来得及增加B账户中的余额,此时银行系统发生故障,导致A的余额减少了,但是B的余额却没增加,所以就需要事务,将A的钱进行回滚。

『 MySQL篇 』:MySQL 事务特性

二.  事务的操作

使用以下SQL语句来开启并提交事务

# 开启一个事务
START TRANSACTION;
#设置保存点 
savepoint point1;
# 多条 SQL 语句
SQL1,SQL2...
#回退事务到保存点
rollback to point1
#回退全部事务
rollback
## 提交事务,有事务操作生效,不能回退
COMMIT;

下面给出一个具体的事务提交的案例:

-- 1.创建一张测试表
CREATE TABLE t27(
	id INT,
	`name` VARCHAR(32));

-- 2.开始事务
START TRANSACTION
-- 3.设置保存点
SAVEPOINT a
-- 执行dml操作
INSERT INTO t27 VALUES(100,'tom');
SELECT * FROM t27;

SAVEPOINT b
-- 执行dml操作
INSERT INTO t27 VALUES(200,'jack');

-- 回退到b
ROLLBACK TO b
-- 继续回退 a
ROLLBACK TO a
-- 如果这样,表示直接回退到事务开始的状态
ROLLBACK
COMMIT 

这个过程当中,设置了两个保存点a , b ,可以回退到指定位置的保存点,也可以直接对事务进行回退,即不改变表的结构,事务设置完要进行  commit 提交。 

三.  事务的四大特性

『 MySQL篇 』:MySQL 事务特性

  • 原子性 : 事务作为一个整体执行,包含在其中的事务要么全部都执行,要么全部都不执行

原子性的实现通过 undo log 日志来完成,当事务执行更新操作之前,数据库将当前数据行的旧值存储到 undo log 日志当中,如果事务执行过程中出现异常情况,就将事务进行回滚,InnoDB引擎就是利用 undo log 保存下来的记录,将数据恢复到事务开始之前。

  • 隔离性:多个事务进行并发访问时,事务之间应该是相互隔离的,一个事务不应该被其他事务干扰,多个并发事务之间要相互隔离
如果多个事务可以同时操作⼀个 数据,那么就会产⽣脏读、重复读、幻读的问题,MySQL中定义了四种隔离级别提供使用,隔离级别的底层实现是锁或者MVCC,但是屏蔽了加锁的细节。
  • 持久性:事务完成进行提交时,对数据库所做的更改将永久性的保存在数据库中,即使数据库发生故障也不影响

当事务执行更新操作时 , 首先将数据的修改操作记录保存到Redo log 中, 而不是直接修改写入到磁盘的数据文件, 接着以顺序追加的方式写入磁盘,使得写入的操作非常高效, 当系统发生故障导致数据库重启时, MySQL 通过Redo log  来恢复为写入磁盘的数据库修改,重新执行这些操作,将数据持久化到磁盘,这样就保证了事务的持久性。

  • 一致性 : 指的是事务开始之前和事务结束只有,数据不会被破坏,假如A账户给B账户转账100元,无论成功与否,A和B的总金额是不发生改变的

InnoDB 引擎通过什么技术来保证事务的这四个特性的呢?

  • 持久性是通过 redo log (重做日志)来保证的;
  • 原子性是通过 undo log(回滚日志) 来保证的;
  • 隔离性是通过 MVCC(多版本并发控制) 或锁机制来保证的;
  • 一致性则是通过持久性+原子性+隔离性来保证;

只有保证了事务的持久性、原子性、隔离性之后,一致性才能得到保障。也就是说 A、I、D 是手段,C 是目的!

四 . 并发事务可能产生的问题

  • 脏读问题

当事务 A 在对数据进行修改的过程中, 事务 B 对同一个数据进行 了读取,此时 B 的读操作就叫做脏读,读取到的数据也被称之为脏数据 。

  • 幻读问题

在同一组数据当中,事务 A 进行查询数据 , 事务 B 进行 插入新的数据,导致事务 A 再次进行相同的查询时,查询到的数据行数发生了改变,这种情况称之为幻读,幻读的解决方案一般为加间隙锁。

  • 不可重复读问题

在同一组数据中,事务 A  进行查询数据, 事务B进行修改数据,导致事务A 重新执行相同的查询时,查询到的内容发生了改变,这种情况就称之为不可重复读,不可重复读的解决方案为加行锁或者表锁。

在这其中,不可重复读和幻读都是并发事务当中容易出现的问题,但是幻读主要涉及的是数据的插入,而不可重复读涉及的是数据的修改和更新,幻读的结果是前后读取的数据的数量不一致,而不可重复读是前后读取到的数据的内容不一致。

其中严重性 : 脏读  > 不可重复读 > 幻读

五 . 数据库的隔离级别

为了规避以上的三种并发事务中可能遇到的问题,MySQL 中提供了四种隔离级别来解决上述的并发事务问题,隔离级别越高,执行效率越低。

  1.  读未提交 :一个事务未提交时,但是他所做的变更就能够被其他事务所看到,即读未提交
  2.  读已提交:  一个事务提交之后,它所做的变更才能够被其他事务所看到,解决了脏读的问题
  3. 可重复读:同一个事务中,多次读取一个事务,获取到的结果是一致的, MySQL 的InnoDB引擎的默认隔离级别就是可重复读,但是没有解决幻读的问题。
  4. 串行化 :串行化会给记录加上读写锁,如果发生了读写冲突时,后访问的事务必须等待前一个事务执行完成,才能继续执行。

所以四种隔离级别的等级高低的排列如下 : 串行化  > 可重复读 > 读已提交 > 读未提交 ,隔离级别越低,事务请求的锁越InnoDB 存储引擎默认使用 可重复读

『 MySQL篇 』:MySQL 事务特性

 MySQL 的隔离级别基于锁和 MVCC 机制共同实现的

  •  设置并查看当前事务的隔离级别
-- 查看当前会话隔离级别
SELECT @@tx_isolation;
-- 查看系统当前隔离级别
SELECT @@ global.tx_isplation
-- 设置当前会话隔离级别
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
-- 设置系统当前隔离级别
SET GLOBAL TRANSACTION ISOLATION LEVEL [设置你想设置的级别]
  • MVCC 

     在MySQL InnoDB引擎层⾯,⼜有新的解决⽅案(解决加锁后读写性能问题),叫MVCC(Multi Version Concurrency Control)  多版本并发控制,它主要基于创建和维护数据的多个版本(或快照),以允许事务之间的并发执行而不会产生冲突。

对于InnoDB引擎,默认情况下会启用MVCC来处理并发事务。这意味着在没有显式设置的情况下,InnoDB引擎会使用MVCC机制来提供并发控制和事务隔离性。可以通过创建和管理数据的多个版本来实现。

『 MySQL篇 』:MySQL 事务特性

     在传统的锁定并发控制机制中,读操作和写操作之间会相互阻塞,因为写操作可能会改变数据,导致读操作的结果不一致。而MVCC通过创建数据的多个版本来解决这个问题。每个事务在开始时会创建一个一致性的数据库快照,然后在执行期间,事务只能看到在其开始之前已经存在的数据版本。这样,读操作可以并发地进行,而不会受到其他事务的写操作的影响 , 后续我们会对 MVCC 实现原理和锁机制进行详细的讲解说明 .


 文章来源地址https://www.toymoban.com/news/detail-458270.html

 

 

到了这里,关于『 MySQL篇 』:MySQL 事务特性的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据库事务四大特性

    事务的4大特性(ACID):   原子性(Atomicity):   事务是数据库的逻辑工作单位,它对数据库的修改要么全部执行,要么全部不执行。   一致性(Consistemcy):   事务前后,数据库的状态都满足所有的完整性约束。   隔离性(Isolation):   并发执行的事务是隔离的,一个不影响一个

    2024年02月11日
    浏览(36)
  • 事务四大特性

    ACID :如果一个数据库支持事务的操作,那么该数据库必须要具备以下四个特性 1、原子性(Atomicity) 事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响 2、一致性(Consistenc

    2024年02月04日
    浏览(40)
  • 数据库事务的四大特性与事务的隔离级别

    概要: 事务的四个特性:原子性、一致性、隔离性、持久性 事务不隔离带来的问题:更新丢失、脏读、不可重复读、虚读(幻读)。其中更新丢失就是并发写,这是一定不允许的,因此一定要解决更新丢失问题。 事务隔离的级别:读未提交(1000)、读已提交(1100)、可重

    2023年04月09日
    浏览(53)
  • Spring事务的四大特性+事务的传播机制+隔离机制

    原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。 事务是一个原子操作, 由一系列动作组成。 组成一个事务的多个数据库操作是一个不可分割的原子单元 ,只有所有的操作执行成功,整个事务才提交。 事务中的任何一个数据库操作失败

    2024年01月20日
    浏览(39)
  • MySQL的事务特性、事务特性保证和事务隔离级别

            事务是指要么所有的操作都成功执行,要么所有的操作都不执行的一组数据库操作。 一、MySQL提供了四个事务特性,即ACID:          1. 原子性(Atomicity) :一个事务中的所有操作要么全部提交成功,要么全部回滚失败,保证事务的原子性。          2. 一

    2024年02月03日
    浏览(41)
  • 事务——什么是事务,事务的特性,事务的隔离级别

            事务就是用户定义的一系列操作,这些操作可以视为一个完成的逻辑处理工作单元,要么全部执行,要么全部不执行,是不可分割的工作单元。 典型场景:银行转账 A 转账100元给B,A账户减少100元,B账户增加100元; 如果A转出失败或者B转入失败(任意一方失败)

    2024年02月10日
    浏览(51)
  • 滴滴滴,请看MYSQL事务的四大特征(ACID)的实现原理:晓其原理而通其实现。

    一.什么是事务的四特征 原子性(Atomicity,或称不可分割性) 一致性(Consistency) 隔离性(Isolation) 持久性(Durability) 接下来,我们将对四大特性的具体概念以及其底层实现原理来进行剖析: 在讲述具体的四大特性之前,我们先补充一点前置知识 : 1.逻辑架构和存储引擎

    2023年04月25日
    浏览(41)
  • 『 MySQL篇 』:MySQL 事务特性

    目录 一 . 什么是事务? 二.  事务的操作 ​三.  事务的四大特性 四 . 并发事务可能产生的问题 五 . 数据库的隔离级别 一 . 什么是事务? 从概念上来讲,事务是一个有限的数据库操作序列构成,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位 。 举个

    2024年02月06日
    浏览(35)
  • 【mysql】事务的四种特性的理解

    🌇个人主页:平凡的小苏 📚学习格言:命运给你一个低的起点,是想看你精彩的翻盘,而不是让你自甘堕落,脚下的路虽然难走,但我还能走,比起向阳而生,我更想尝试逆风翻盘 。 🛸 Mysql专栏 : Mysql内功修炼基地 家人们更新不易,你们的👍点赞👍和⭐关注⭐真的对我

    2024年02月12日
    浏览(46)
  • Oracle和MySQL有哪些区别?从基本特性、技术选型、字段类型、事务、语句等角度详细对比Oracle和MySQL

     导航: 【Java笔记+踩坑汇总】Java基础+进阶+JavaWeb+SSM+SpringBoot+瑞吉外卖+SpringCloud+黑马旅游+谷粒商城+学成在线+MySQL高级篇+设计模式+面试题汇总+源码_vincewm的博客-CSDN博客 目录 一、基本区别 1.1 基本特性 1.2 Oracle和MySQL如何做技术选型? 1.3 RDBMS和ORDBMS的区别 1.4 默认端口号和用

    2024年02月12日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包