MySQL数据库之事物(详解)

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

目录

一.事物的概念

二.为什么需要事物

三.事物的执行机制

四.MySQL的事物基本使用

五.事物的ACID特性

5.1一致性

六 事物的隔离级别

6.1事物隔离的原因及解决思路

6.2MySQL事物的隔离级别


🎁个人主页:tq02的博客_CSDN博客-C语言,Java,Java数据结构领域博主
🎥 本文由 tq02 原创,首发于 CSDN🙉
🎄 本章讲解内容:MySQL的事物讲解

🎁欢迎各位→点赞👍 + 收藏⭐ + 评论📝+关注

MySQL数据库之事物(详解),MySQL,数据库,mysql,sql

🎥学习专栏:  C语言         JavaSE       MySQL基础  

一.事物的概念

         在MySQL中,数据库事物支持是在引擎层实现的,我们知道,MySQL是一个支持多引擎的系统,但不是所有的引擎都支持事物,比如MySQL原生的MyISAM引擎就不支持事物,这也是MyISAM被InnoDB代替的重要原因之一。在不同的环境中,都可以有事务。对应在数据库中,就是数据库事务

数据库的事务(Transaction): 指一系列数据库操作作为一个逻辑单元执行的过程。事务可以确保数据库中的数据一致性和完整性。

本质:将多个操作打包为1个操作来完成,要么成功,要么失败。

事物的优点:可以确保数据库操作的可靠性,并提高数据的安全性和可靠性。


二.为什么需要事物

        在现实生活当中,我们经常会有转账的行为,假设:张三给李四转账1000元。而其实会有很多种问题产生,导致转账不成功。例如:

  • 张三的账户减少了1000元,李四的账户因为系统原因导致没有增加1000元
  • 转账完成时,系统故障,张三的账户未扣1000元
  • 在转账的时候,有他人给李四转账,导致李四账户异常

而把这种转账行为当作数据库的执行语句来看,很明显会出现巨大的问题,因此为了解决问题:提出了 事物 来控制,保证要么执行失败,要么执行成功。

三.事物的执行机制

        我们先假设事物有3个操作,分别为操作1、操作2、操作3.在事物执行之前,我们无法判断是哪步操作会有故障,但是执行时发生故障时,会主动将前面的操作进行还原,也称回滚操作

  • 当操作一出现故障时,直接停止操作,告知失败。
  • 当操作二出现故障时,会将操作一进行还原,再告知失败
  • 操作三出现失败时,会将操作一、操作二进行还原,再告知失败

回滚的实现:通过特定的日志,将事物中的每一个操作记录下来,一旦需要回滚,按照日志将之前的操作进行“逆操作”来执行。

逆操作:若上一个操作是插入,逆操作就是删除、若上一个操作是删除,逆操作就是插入。

因此事物利用 原子性 通过回滚操作从日志中进行逆操作

四.MySQL的事物基本使用

先准备一个测试表:

create table test(
   id int primary key auto_increment,
     name varchar(20),
     sex varchar(20) );

现在进行事物的操作:

  1. 事物开启:start  transaction;
  2. 输入多个sql语句,作为事物的操作
  3. 以commit(提交) 或 rollback(回滚)结尾

:rollback即是全部失败,commit即是全部成功

代码操作:

mysql> start transaction;

mysql> insert into test(name,adress) values('tq02','男');
mysql> update text set sex='女' where name = 'tq01';

mysql>commit;

五.事物的ACID特性

        事物具有四个特性,通常被称为ACID特性

  1. 原子性(Atomicity):事务中的操作要么全部成功执行,要么全部失败回滚。如果其中任何一个操作失败,整个事务将被回滚到初始状态。

  2. 一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏。即,事务执行前后数据库的状态是一致的。

  3. 隔离性(Isolation):并发执行的多个事务之间是相互隔离的,每个事务对其他事务的操作是不可见的,直到事务提交。

  4. 持久性(Durability):一旦事务提交成功,其对数据库的修改将永久保存,即使发生系统故障也不会丢失。

5.1一致性

        事物追求的根本是一致性,而破坏一致性主要来源于两个方面,事物的并发执行和事物故障或者系统故障。

事物的并发操作:两个或多个sql语句同时执行。

例如:一边查找张三的工资条、另一边让张三的工资提高500,那么查找出来的是张三涨还是没涨的工资呢?这就是使数据不存在一致性。

事物故障和系统故障:操作发生错误,通过回滚的方式回复。

  • 数据库系统是通过并发控制技术日志恢复技术来避免这种情况发生的。
  • 并发控制保证事务的隔离性和一致性,日志恢复保证了原子性、持久性

六 事物的隔离级别

6.1事物隔离的原因及解决思路

    当多个用户同时访问数据库时(并发操作),每个事务的操作可能相互干扰,从而导致数据的混乱和不一致,而导致数据的混乱和不一致有3种原因:脏读、不可重复读、幻读


脏读(Dirty Read)问题:脏读是指一个事务在读取另一个事务未提交的数据时,导致数据不一致。。

抽象解释:当我在考试的时候,隔壁的人偷看了我的选择题答案,但是我在交卷前修改了,导致他读取我的答案时出错

 解决方案:在事物未提交数据前加锁,防止其它事物读取,简称:写数据加锁。


不可重复读(Non-repeatable Read)问题:不可重复读是指在同一个事务中多次读取同一数据,但得到的结果却不一致。

 抽象解释:当我在考试的时候,隔壁的人想偷看了我的选择题答案时,我立马修改答案,就无法读取我原来的答案了。

解决方案:事物读取也加锁,就是指其它事物无法更改数据。简称:读数据加锁


幻读(Phantom Read)问题:幻读是指一个事务在读取到某个范围内的数据后,另一个事务插入了新的数据,导致第一个事务再次读取时,发现有新增的数据。

 抽象解释:当我在考试的时候,隔壁的人看我的选择题答案时,我不会修改选择题答案,但是我依然在写填空题答案,并且他也看得到我填空题答案。

解决方案:串行化,彻底放弃并发执行,所有事物变为一个一个顺序执行。


脏读--------->不可重复读--------->幻读,事务的隔离性在不断提高,但是并行不断降低。

注:并发控制就是有脏读、不可重复读、幻读的问题。

6.2MySQL事物的隔离级别

        MySQL数据库为了解决以上的问题,提出了4种事物隔离级别。分别为:read uncommitted、readcommitted、repeatable read、serializble

1.read uncommitted

        允许读未提交的数据,也就是一个事物可读取另一个事物未提交的数据,因此会发生脏读、不可重复读、幻读的情况。隔离性低,数据可靠性最低,并发程度最高。

2.read committed

        允许读取已经提交的数据,讲解了脏读的问题,给写操作加锁,但依然存在不可重复读和幻读的问题,隔离性提高了,并发程度降低,数据可靠性提高。

3repeatable read

        可以重复读取数据(写操作和读操作都加锁),讲解了脏读和不可重复读的问题,但是存在幻读的问题,隔离性又提高了,数据可靠性提高,并发性降低了。

4serializable

        事物彻底的变成了串行执行,解决了脏读、不可重复读、幻读的问题,隔离性最高,但是同样放弃了并发操作,数据可靠,效率也最低。


注:由于不同的隔离级别,拥有不同的特性,因此在实际操作里,我们需要根据实际需求场景类决定使用哪个隔离级别。

事物的注意点:需要知道为什么需要事物?事物的作用是什么?事物隔离的原因及其作用?

·                                                                                             ----------懒惰的tq02文章来源地址https://www.toymoban.com/news/detail-603060.html

到了这里,关于MySQL数据库之事物(详解)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • MySQL之SQL与数据库简介

    SQL首先是一门高级语言,同其他的C/C++,Java等语言类似,不同的是他是一种结构化查询语言,用户访问和处理数据库的语言,那类似于C语言,SQL也有自己的标准,目前市面上的数据库系统都支持SQL-92标准 SQL这门语言是具有统一性的,但是不同的数据库支持的SQL有略微差别,

    2024年01月23日
    浏览(49)
  • MySQL数据库基础(九):SQL约束

    文章目录 SQL约束 一、主键约束 二、非空约束 三、唯一约束 四、默认值约束 五、外键约束(了解) 六、总结 PRIMARY KEY 约束唯一标识数据库表中的每条记录。 主键必须包含唯一的值。 主键列不能包含 NULL 值。 每个表都应该有一个主键,并且每个表只能有一个主键。 遵循原

    2024年02月19日
    浏览(56)
  • 【数据库】MySQL 高级(进阶) SQL 语句

    location表格创建 store_info表格创建 显示表格中一个或数个字段的所有数据记录 不显示重复的数据记录 按照条件进行查询 在已知的字段数据取值范围内取值 另外还有not in命令,用法一致,表示显示不在指定范围内的字段的值。 在两个字段数据值之间取值,包含两边字段的数据

    2024年02月09日
    浏览(132)
  • MySQL数据库入门到精通1--基础篇(MySQL概述,SQL)

    目前主流的关系型数据库管理系统: Oracle:大型的收费数据库,Oracle公司产品,价格昂贵。 MySQL:开源免费的中小型数据库,后来Sun公司收购了MySQL,而Oracle又收购了Sun公司。 目前Oracle推出了收费版本的MySQL,也提供了免费的社区版本。 SQL Server:Microsoft 公司推出的收费的中

    2024年02月07日
    浏览(48)
  • MySQL数据库基础(五):SQL语言讲解

    文章目录 SQL语言讲解 一、SQL概述 二、SQL语句分类 1、DDL 2、DML 3、DQL 4、DCL 三、SQL基本语法 1、SQL语句可以单行或多行书写,以分号结尾 2、可使用空格和缩进来增强语句的可读性 3、MySQL数据库的SQL语句不区分大小写,建议使用大写  4、可以使用单行与多行注释 四、总

    2024年02月19日
    浏览(54)
  • 【MySQL】数据库SQL语句之DML

    目录 前言: 一.DML添加数据 1.1给指定字段添加数据 1.2给全部字段添加数据 1.3批量添加数据 二.DML修改数据 三.DML删除数据 四.结尾   时隔一周,啊苏今天来更新啦,简单说说这周在做些什么吧,上课、看书、放松等,哈哈哈,所以博客就这样被搁了。   今天感觉不错,给大

    2024年02月08日
    浏览(62)
  • 【MySQL】——关系数据库标准语言SQL(大纲)

    🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL:数据结构_IT闫的博客-CSDN博客 🐠数据结构:​​​​​​数据结构_IT闫的博客-CSDN博客 💎C++:C++_IT闫的博客-CSDN博

    2024年01月20日
    浏览(60)
  • 【MySQL】MySQL PHP 语法,PHP MySQL 简介,查询,下载 MySQL 数据库, SQL 教程

    作者简介: 辭七七,目前大一,正在学习C/C++,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: 七七的闲谈 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 MySQL 可应用于多种语言,包括 PERL, C, C++, JAVA 和 PHP,在这些语言中,MySQL 在 PHP 的 web 开发中是应用最广泛。 我们

    2024年02月11日
    浏览(56)
  • 如何将 .sql 文件导入到 MySQL 数据库?

    导入 SQL 文件到 MySQL 数据库是一个常见的任务,本文将介绍如何执行该操作。我们将逐步讲解具体的步骤,帮助您完成这个过程。 首先,在您的计算机上打开命令提示符或终端窗口。这将是执行导入操作的地方。 在执行导入操作之前,请确保您的计算机已安装并且可以从命

    2024年02月11日
    浏览(52)
  • mysql,mysqldump数据库导入导出sql文件

    在使用MySQL数据库时,经常需要备份和恢复数据库,通过导出sql文件备份和直接执行sql文件恢复是非常便捷的方式。本篇博客主要介绍如何对MySQL数据库通过cmd命令导出和导入sql文件。 导出sql文件可以使用mysqldump。主要有如下几种操作: ①导出整个数据库 (包括数据库中的数

    2023年04月10日
    浏览(61)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包