返回顶部
首页 > 资讯 > 数据库 >【MySQL】事务
  • 639
分享到

【MySQL】事务

mysql数据库sql 2023-08-17 08:08:23 639人浏览 八月长安
摘要

文章目录 1. 前言2. 事务简介3. 事务操作4. 事务四大特性5. 并发事务的问题6. 事务隔离级别7. 总结 1. 前言 事务是数据库管理系统中非常重要的概念,本文主要介绍的是事务的四大特性,并发事务可能引发的问题以及事务

1. 前言

事务数据库管理系统中非常重要的概念,本文主要介绍的是事务的四大特性,并发事务可能引发的问题以及事务的隔离级别.

2. 事务简介

事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败

事务的使用场景的典型案例就是转账.转账是不允许出现任何差错的,出现一点都会造成巨大的损失.例如此时用户A给用户B转了200块钱.那么在数据库中执行的操作就是让用户A的余额减200,让用户B的余额加200.

如果不使用事务,则可能会出现以下问题:用户A的余额在减200之后,数据库在执行给用户B的余额加200时,数据库挂了或者出现异常情况了,此时用户B的余额并没有加200.那么A就平白无故少了200元.此时问题就很大了.
但如果使用事务时,用户A的余额减200,用户B的余额加200这两个操作是一个整体. 结果就两个,要么成功,要么失败. 那么上述出现的问题就很可以很容易进行处理了. 如果出现上述的问题,那么此时数据库就会进行事务的回滚,可以理解为撤销操作.将数据恢复到数据执行前. 由此可见事务的重要性.

3. 事务操作

事务操作的操作主要有三个:开启事务,提交事务和回滚事务.

Mysql中开启事务有三种方式:

使用 BEGIN语句可以手动开启使用 SET AUTOCOMMIT=0/1 语句(0为手动提交,1为默认提交)使用 START TRANSACTioN语句

提交事务和回滚事务:

COMMIT; # 提交事务ROLLBACK; # 回滚事务

mysql的事务是默认提交的,也就是说,当执行一条DML语句时,Mysql会隐式提交事务.

以刚才提到的转账示例来说:其实主要的步骤就是修改用户A和用户B的余额两步,当然追求严谨的话,转账前可以判断一下余额是否大于转账金额之类的.我这边就不写了.
初始状态下用户A和用户B余额:
在这里插入图片描述
接下来我们使用事务来处理数据库执行过程中可能出现的上述问题:
在这里插入图片描述
例如我这里把SQL语句改成错的.来模拟数据库出错的情况.
执行完SQL语句之后,我们看到用户A的余额变了.但是用户B的余额并没有变.
在这里插入图片描述
此时数据已经发生错误了.我们接下来就要回滚事务来恢复数据.
在这里插入图片描述
回滚事务之后我们可以看到用户A和用户B的数据已经恢复到修改数据之前的了.

4. 事务四大特性

事务具有以下四个特性,也被称为 ACID 特性:

  1. 原子性(Atomicity):事务是一个原子操作,不可分割。该操作的所有步骤要么全部完成,要么全部不完成,不会存在部分完成的情况。如果有任何一个操作失败,事务会被回滚到开始前的状态,所有修改过的数据都会被撤销。

  2. 一致性(Consistency)事务执行前和执行后,数据库的状态都必须是一致的。事务执行前的数据库状态是一个合法的状态,执行后的数据库状态也必须是合法的状态。换句话说,事务执行过程中不会产生矛盾和冲突,保证数据的完整性和正确性。

  3. 隔离性(Isolation):多个事务在并发执行时,每个事务的操作应该与其他事务的操作相互隔离,不能互相干扰。每个事务所做的修改必须与其他事务所做的修改相互独立,不会产生互相干扰的情况。保证每个事务独立执行,不会产生并发问题。

  4. 持久性(Durability):一旦事务提交,它所做的修改就会永久保存到数据库中,即使系统崩溃也不会丢失。数据的持久性保证了事务的提交结果不会被撤销,即使在系统故障或崩溃的情况下也能够恢复。

事务的四个特性保证了数据库操作过程的可靠性、一致性和持久性,是保证数据完整性和正确性的重要手段。

5. 并发事务的问题

事务是并发控制的基本单位,而并发事务可能会使事务的ACID特性遭到破坏.并发事务可能出现以下三个问题:

  • 脏读:脏读是指一个事务在读取另一个未提交的事务的数据时,读取到了未提交的数据。如果另一个事务回滚了,这个事务读到的数据就是无效的。脏读会导致数据的不一致性。
  • 不可重复读:不可重复读是指一个事务多次读取同一组数据,但在此期间,另一个事务更新了这组数据,从而导致第一个事务两次读取的数据不一致。不可重复读会导致数据的不一致性。
  • 幻读:幻读是指一个事务在读取了一组数据后,另一个事务插入了一条新数据,导致第一个事务再次读取同一组数据时,发现数据增加了一条,从而产生了幻觉。幻读会导致数据的不一致性。

以上三种问题都是由于多个事务并发执行导致的,解决这些问题的方法包括:

  1. 加锁:通过对共享数据加,保证每个事务对共享数据的访问是互斥的,解决脏读和不可重复读问题。
  2. MVCC(多版本并发控制):通过在每个事务的视图中记录数据的版本信息,保证每个事务读取到的数据都是一致的,解决不可重复读和幻读问题。
  3. 串行化:通过将并发事务串行执行,保证每个事务独立执行,不会产生并发问题。但是串行化会降低系统的并发性和吞吐量,不适合高并发的场景。

6. 事务隔离级别

事务的隔离级别是指多个并发事务之间相互隔离的程度,MySQL中支持4种隔离级别,从低到高分别为:

  1. 读未提交(Read Uncommitted):最低的隔离级别,允许一个事务读取另一个事务未提交的数据,可能会导致脏读、不可重复读和幻读问题。

  2. 读已提交(Read Committed):允许一个事务读取另一个事务已提交的数据,避免了脏读问题,但仍可能导致不可重复读和幻读问题。

  3. 可重复读(Repeatable Read):保证在同一个事务中多次读取同一组数据时,读取到的数据始终一致,避免了脏读和不可重复读问题,但仍可能导致幻读问题。

  4. 串行化(Serializable):最高的隔离级别,通过将并发事务串行执行,避免了所有并发问题,但会导致性能降低。

隔离级别脏读不可重复读串行化
Read Uncommitted
Read Committed×
Repeatable Read××
Serializable×××

查看事务的隔离级别:

select @@transaction_isolatio;

设置事务的隔离级别:

SET [SESSION/GLOBAL] TRANSACTION ISOLATION LEVEL <隔离级别>;# SESSION: 针对当前的会话窗口有效# GLOBAL: 对所有客户端的会话窗口有效

隔离级别越高,相互隔离的程度越高,但同时也会导致性能降低和死锁等问题。在实际应用中,需要根据不同的业务需求和系统性能来选择适当的隔离级别。MySQL 默认的隔离级别是可重复读(Repeatable Read)。

7. 总结

事务对于数据库管理系统的正确性、可靠性、完整性和安全性都非常重要,是保障数据质量的关键手段。理解并发事务可能引起的问题以及这些问题是什么含义,并且要学会合理设置事务的隔离级别处理并发事务可能带来的问题.

感谢你的观看!希望这篇文章能帮到你!
专栏:《速通MySQL》在不断更新中,欢迎订阅!
“愿与君共勉,携手共进!”
在这里插入图片描述

来源地址:https://blog.csdn.net/m0_63463510/article/details/130534523

您可能感兴趣的文档:

--结束END--

本文标题: 【MySQL】事务

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

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

猜你喜欢
  • MySQL事务
      一、事务的概念 事务就是一组原子性的SQL查询,或者说一个独立的工作单元。如果数据库引擎能够成功地对数据库应用该组查询的全部语句,那么就执行该组查询。如果其中有任何一条语句因为崩溃或其他原因无法执行,那么所有的语句都不会执行。...
    99+
    2022-01-22
    MySQL事务
  • MySQL事务。
    相关资料:https://zhuanlan.zhihu.com/p/70701037        https://zhuanlan.zhihu.com/p/59061106 一、事务。   1、概念。事务是由一组SQL语句组成的逻辑处理单...
    99+
    2018-12-10
    MySQL事务。
  • MySQL——事务
    事务:指一组SQL语句 回滚:指撤销指定SQL语句的过程 提交:将未存储的SQL语句结果写入数据库表 保留点:事务处理过程中设置的临时占位符,可以对它发布回退 事务的四大特性 原子性:事务中所有的操作是不可...
    99+
    2018-05-27
    MySQL——事务
  • mysql-事务
    事务(transaction) 事务是业务逻辑的一个基本的单元组成。 每一个事务由一条条sql语句组成。 和事务相关的语句(insert,delete,update)这些DML语句 事务的存在保证了数据的安全性。 事务机制: 每...
    99+
    2019-08-05
    mysql-事务
  • MySQL 事务
    目录 什么是事务 为什么要使用事务 事务优点 总结事务命令 详细解释: 什么是事务 多条 sql 语句,要么全部成功,要么全部失败。 MySQL 的事务是在存储引擎层实现。 MySQL 的事务有 ACID ...
    99+
    2023-09-09
    mysql 数据库
  • MySQL—事务
    MySQL—事务 🔎定义🔎事务的特性原子性一致性持久性隔离性 🔎并发执行事务可能产生的问题脏读不可重复读幻读总结 🔎MySQL—事务的隔离级别 ǵ...
    99+
    2023-08-16
    mysql android 数据库
  • 【MySQL】事务
    文章目录 1. 前言2. 事务简介3. 事务操作4. 事务四大特性5. 并发事务的问题6. 事务隔离级别7. 总结 1. 前言 事务是数据库管理系统中非常重要的概念,本文主要介绍的是事务的四大特性,并发事务可能引发的问题以及事务...
    99+
    2023-08-17
    mysql 数据库 sql
  • mysql之事务
    我们先来说说什么是事务:       事务就是逻辑上的一组操作,组成这组操作的各个单元,要不全都成功,要不全都失败。一个事务是一个连续的...
    99+
    2024-04-02
  • MySQL InnoDB 事务
    事务的定义 事务:数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作; 事务是一组不可再分割的操作集合(工作逻辑单元)。 典型事务使用场景:转账 MySQL 开启事务: MySQL 默认是开启...
    99+
    2024-04-02
  • mysql与事务
    什么是事务 事务是作为一个逻辑单元执行的一系列操作,一个逻辑工作单元必须有四个属性,称为 ACID(原子性、一致性、隔离性和持久性)属性,只有这样才能成为一个事务 一、事务的特性(ACID) ...
    99+
    2024-04-02
  • mysql基础(六)mysql事务
    mysql事务:是一个独立的工作单元 事务必须通过ACID测试:     原子性(Atomicity):一个事务的所有操作要么全部成功执行,要么全部失败后回滚 &n...
    99+
    2024-04-02
  • MySQL 事务管理
      事务的4个特性(ACID) 原子性 Atomicity。每个事务中的操作,要么都成功,要么都失败 一致性 Consistency。事务执行前后,数据库中的数据应该保持一致 隔离性 Isolation。事务之间应该是隔离的,事...
    99+
    2015-09-09
    MySQL 事务管理
  • MySQL事务介绍
    什么是事务 事务的概念 从业务层面上来说,事务就是一个最小的不可分割的单元,通常一个事务对应的是一个完整的业务(比如银行的转账操作)。 为什么要有事务 仍以银行转账为例加以说明,比如我要从账号A转账100元到账号B,现在数据库有一...
    99+
    2019-11-07
    MySQL事务介绍
  • MySQL事务处理
    概述 在MySQL中只有使用了InnoDB数据库存储引擎的数据库或表才支持事务。 事务处理可以用来维护数据库的完整性,保证成批的SQL语句要么全部成功,要么全部失败。 事务用来管理DDL、DML、DCL操作,比如:insert、...
    99+
    2014-12-03
    MySQL事务处理
  • Mysql事务原理
    一、什么是事务 事务:是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作;这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行;事务是一组不可再分割的操作集合(工作逻辑单元); 事务的四大特性: 原子性(Atom...
    99+
    2020-08-23
    Mysql事务原理
  • mysql事务详解
    事务的特性(Atomicity) 原子性 -- 回滚日志 一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这...
    99+
    2016-12-01
    mysql事务详解 数据库入门 数据库基础教程 数据库 mysql
  • MySQL事务学习
    MySQL事务: 1、事务特性:原子性,一致性,隔离性,持久性 原子性:对一些操作,要么同时成功,要么同时失败。 一致性:对一些操作,处理结果必须一致的,比如转账:A转给B,那么A账户减少100元,则B账户必须增加100元。 隔离性:多个...
    99+
    2019-11-20
    MySQL事务学习
  • MySQL 事务和锁
    事务概述 当多个用户访问同一份数据时,一个用户在更改数据的过程中,可能有其他用户同时发起更改请求,为保证数据库记录的更新从一个一致性状态变为另外一个一致性状态,使用事务处理是非常必要的,事务具有以下四个特性: 原子性(Atomicit...
    99+
    2020-12-06
    MySQL 事务和锁
  • MySQL 索引事务
    目录 1. 索引1.1 概念1.2 索引的使用1.2.1 查看索引1.2.2 创建索引1.2.3 删除索引1.2.4 索引背后的数据结果 2. 事务2.1 概念2.2 事务的特性2....
    99+
    2023-09-16
    mysql 数据库
  • mysql 事务解析
    事务(transaction) 事务是业务逻辑的一个基本的单元组成。 每一个事务由一条条sql语句组成。 和事务相关的语句(insert,delete,update)这些D...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作