iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >【MySQL数据库 | 第十五篇】事务
  • 217
分享到

【MySQL数据库 | 第十五篇】事务

数据库mysqljava 2023-09-03 14:09:24 217人浏览 独家记忆
摘要

    目录    前言:  介绍事务:  控制事务:  事务四大特性:  并发事务问题:  事务隔离级别: 总结:    前言: 这章我们将进入到Mysql基础篇的最后一章:事务,希望大家可以坚持下去,跟着我一起走完mysql的学

 

 

c6e9b8cdd80f447a9d5b085ec88483be.png

目录

 

 前言:

 介绍事务:

 控制事务:

 事务四大特性:

 并发事务问题:

 事务隔离级别:

总结:


 

 前言:

这章我们将进入到Mysql基础篇的最后一章:事务,希望大家可以坚持下去,跟着我一起走完mysql学习之旅。

 介绍事务:

Mysql是一种关系型数据库管理系统,支持事务管理。事务是指一组数据库操作它们按照特定的顺序执行,并且要么全部成功提交,要么全部失败回滚。在MySQL中,事务可以用来保证数据的完整性和一致性。

在MySQL中,通过使用事务,可以保证对数据的操作是可靠和安全的。当对数据进行复杂的操作时,使用事务可以确保一组操作都成功或者都失败,防止出现数据不一致的问题。

举例:
49300c92f5364096a8f842eb68911d58.png

银行转账就是一个典型的事务,如果张三要给李四汇款,那么我们不能分开执行 给张三扣一千块,给李四转一千块,因为这样如果即使张三没有1000元,我们也会给李四转账。因此我们应该把这两个整理成为一个操作:先给张三扣钱,如果扣钱成功,再给李四汇款,这样如果张三的钱不够,我们就可以及时中断操作,而我们这样集成多个操作一起执行就叫做定义一个事务。

MySQL的事务时默认自动提交的,也就是说:当执行一条DML语句的时候,MySQL会立即隐式的提交事务。

控制事务:

  • 开始事务(BEGIN):用于明确一个事务的开始,之后的所有操作都属于同一个事务范围内。
  • 提交事务(COMMIT):用于将一个事务提交到数据库中,表示该事务所有的修改操作已经完成,数据已被持久化,该事务执行完成。
  • 回滚事务(ROLLBACK):用于撤销一个事务中发生的所有修改操作,使得数据回到事务开始前的状态。当一个事务无法完成时,需要撤销该事务的所有变更。

查看/设置事务提交方式

SELECT @@ autocommit;//查询当前事务提交状态SET @@ cutocommit =0;//1  自动提交   0    手动提交

2.提交事务

COMMIT;

3.回滚事务

ROLLBACK;

控制事务案例:

1.通过修改事务提交方式的方法来控制事务

我们可以通过代码来演示刚才所说的银行例子:
二人初始状态:
2378713ea5704f09b3ae967164e0dd41.png

我们把事务提交方式修改为手动提交后进行转账操作:

select @@autocommit;set @@autocommit =0;-- 1. 查询张三余额select * from account where name = '张三';-- 2. 张三的余额减少1000update account set money = money - 1000 where name = '张三';-- 3. 李四的余额增加1000update account set money = money + 1000 where name = '李四';

 我们此时如果执行这些语句:
结果:
704b22a5900a421cadd28ead911d34fe.png

这是因为我们把事务提交方式设置为了手动提交,这样系统执行语句并不会向数据库提交事务。

提交事务(commit):

select @@autocommit;set @@autocommit =0;-- 1. 查询张三余额select * from account where name = '张三';-- 2. 张三的余额减少1000update account set money = money - 1000 where name = '张三';-- 3. 李四的余额增加1000update account set money = money + 1000 where name = '李四';commit;

结果:

0285d4c3053945b4aaa6066604a3b599.png

需要注意的是如果我们不提交事务而不断执行操作,我们并不能够认为这些操作并没有执行,而是他被存储在了待执行操作里,只要我们提交了事务,这些操作就会一一执行:
 4d76fe505e5547c48e3f0f9a33ffa688.png

证明:我们尝试第一次只进行语句执行操作不提交,第二次进行语句执行操作和提交

操作结果:

cf2561af24f2475bb6a85de526283581.png

不通过修改事务提交方式来对事务进行操作:

开启事务

START TRANSACTioN 或 BEGIN;

提交事务

COMMIT;

回滚事务

ROLLBACK;

代码: 

START TRANSACTION ;select * from account where name = '张三';update account set money = money - 1000 where name = '张三';update account set money = money + 1000 where name = '李四';COMMIT ;

结果:
07ed118ca8cb4eb78809e1cd9ee770f9.png

 事务四大特性:

  1. 原子性(Atomicity):在一个事务中,要么所有的操作都成功提交,要么全部回滚到事务开始前的状态,保证操作的原子性。

  2. 一致性(Consistency):事务执行结束后,数据应该保持一致性状态,不管事务执行成功或失败,数据库都应该满足预定义的完整性约束条件。

  3. 隔离性(Isolation):在一个事务执行的过程中,不会被其他并发的事务所干扰,保证了事务的隔离性。

  4. 持久性(Durability):事务提交后,其所做的修改将永久保存到数据库中。

并发事务问题:

脏读(Dirty Read):一个事务读取到了另一个事务尚未提交的数据,如果那个事务回滚或者修改了该数据,可能会造成数据不一致性。

不可重复读(Non-repeatable Read):一个事务在多次读取一个数据时,由于这个数据被其他事务修改导致其多次读取到不同的结果,这种情况下,第一个事务可能会认为数据被修改了多次,但实际上只是一个事务修改了。

幻读(Phantom Read):一个事务在多次读取一组数据时,由于其他事务插入了新的数据导致其读取到了不同的数据行,这种情况下,第一个事务可能会认为数据被修改或删除了,但实际上只是有新的行插入了。

解决这些问题的方法通常是加或者使用更高级的事务隔离级别。例如:

1. 通过在读取数据时加锁来避免脏读和不可重复读,例如使用行锁或表锁。

2. 提高事务隔离级别,例如升级到可重复读级别,这样防止了不可重复读,但不能完全避免幻读。

3. 使用更高级的隔离级别,例如串行化,这样可以同时避免脏读、不可重复读和幻读,但也会对性能造成一定的影响。

需要根据具体的业务场景、数据类型和访问模式选择合适的解决方案来保证数据的一致性和可靠性。

事务隔离级别:

  1. 读未提交(Read Uncommitted):一个事务可以读取另一个未提交的事务中的数据。本级别隔离最低,会存在脏读、不可重复度和幻读的问题,并发量最大,性能最优。

  2. 读已提交(Read Committed):读取另一并发事务提交的变化数据,读取操作时加锁,所以一定程度上可以避免脏读。但因为以读未提交为基础,因此仍然可能出现不可重复读和幻读的问题。

  3. 可重复读(Repeatable Read):在一个事务中多次读取同一记录时,它能够保证所读取的数据是一样的,该级别通过行级锁定已读取数据,避免了不可重复读,但仍可能出现幻读。

  4. 序列化(Serializable):所有事务顺序执行,即依次执行,不能并发执行,以此保证最高级别的隔离程度,也保证了隔离级别下的数据一致性。是最保险的事务隔离级别,但并发性最差,性能最低。

       Repeatable Read是MySQL的默认事务隔离级别

 语法:

查看当前事务隔离级别

SELECT @@TRANSACTION_ISOLATION;

设置事务隔离级别

SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {隔离级别};

SESSION与GLOBAL区别:

  • SESSION是指在当前客户端设置隔离级别
  • GLOBAL是指在所有客户端设置隔离级别。

 

总结:

        本片我们介绍了事务以及事务提交问题,MySQL数据库的基础篇就到此完结了,下一篇我会详细讲解什么是脏读,幻读,不可重复读。然后会持续更新进阶篇,也就是对各种语句的优化,欢迎大家持续阅读。

 

今天的内容到这里就结束了,感谢大家的阅读。

如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!

8ec5ca9680024c9ca2ac25b357ec4821.png  

 

来源地址:https://blog.csdn.net/fckbb/article/details/131118338

您可能感兴趣的文档:

--结束END--

本文标题: 【MySQL数据库 | 第十五篇】事务

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

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

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

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

下载Word文档
猜你喜欢
  • 【MySQL数据库 | 第十五篇】事务
        目录    前言:  介绍事务:  控制事务:  事务四大特性:  并发事务问题:  事务隔离级别: 总结:    前言: 这章我们将进入到MySQL基础篇的最后一章:事务,希望大家可以坚持下去,跟着我一起走完MySQL的学...
    99+
    2023-09-03
    数据库 mysql java
  • 《MySQL高级篇》十、数据库其他调优策略
    文章目录 1.数据库调优的措施1.1调优的目标1.2 如何定位调优问题1.3 调优的维度和步骤第1步:选择适合的DBMS第2步:优化表设计第3步:优化逻辑查询第4步:优化物理查询第5步:使用Redis或 Memcached 作为缓存...
    99+
    2023-08-30
    数据库 mysql 服务器
  • 【Mysql数据库 第13章】MySQL的事务、事务的隔离级别、事务的保存点
    文章目录 💨往期精彩知识👇 一、什么是事务? 二、事务的开启关闭提交操作 三、事务的保存点 四、事务的特性 五、事务的隔离级别 作者:KJ.JK 💨往期精彩知识👇 💖Spr...
    99+
    2023-08-18
    mysql mysql的事务 事务的隔离级别 事务的保存点 事务的特性
  • MySQL学习之数据库表五大约束详解小白篇
    目录1.约束概念和分类2.五大约束的添加和删除2.1添加约束的六种方法2.2三种删除约束的方式2.3五大约束分别对应的添加删除方式(序号对应2.1和2.2)2.4对于创建约束的总结2...
    99+
    2024-04-02
  • 【Flask&MySQL】Flask连接数据库MySQL(十)
    Flask操作数据库MySQL 先自行安装好MySQL。Flask想要操作数据库,必须要先安装Python操作 MySQL 的驱动。在Python中,目前有以下MySQL驱动包。 MySQL-python:也就是MySQLdb。是对C语言操...
    99+
    2023-09-02
    数据库 mysql python flask
  • Java面试题冲刺第十二天--数据库(2)
    目录面试题2:并发场景下事务会存在哪些数据问题? 正经回答:深入追问:追问1:那Innodb是如何解决幻读问题的呢?面试题3:说一下MySQL中你都知道哪些锁?正经回答:深入追问: ...
    99+
    2024-04-02
  • Java面试题冲刺第三十天--数据库(6)
    目录面试题1:有个需求需要快速删除MySQL表中一亿条数据,表中有2亿数据,能说一下你的思路么?1、复制表+删除索引2、分批插入数据3、drop删除掉老表4、重命名新表为n...
    99+
    2024-04-02
  • Java面试题冲刺第十三天--数据库(3)
    目录面试题1:MySQL有哪些数据类型?追问1:char 和 varchar 的区别是什么?1、固定长度 & 可变长度2、存储方式3、存储容量4、思考:既然VARCHAR长度...
    99+
    2024-04-02
  • Java面试题冲刺第十九天--数据库(4)
    目录面试题1:说一下你对聚集索引与非聚集索引的理解,以及他们的区别?1、聚集索引2、非聚集索引追问1:为什么聚集索引可以创建在任何一列上,如果此表没有主键约束,即有可能存在重复行数据...
    99+
    2024-04-02
  • MySQL的第一篇文章——了解数据库、简单的SQL语句
    目录 学习目标 第一章 介绍数据库 1. 数据库概述 2. MySQL概述 第二章 MySQL的使用 1. MySQL服务的启动 2. 客户端连接MySQL 2.1 命令行客户端 第三章 SQL的介绍 1. 什么是SQL 2. SQL的分类...
    99+
    2023-09-09
    数据库 mysql sql
  • 三战MySQL数据库【终极篇】
    MYSQL入门系列——第三篇 每篇前言:0.准备工作:1.表结构修改:(关键字alter)2.约束条件:(1)默认约束(default):(2)非空约束(not null):(3)唯一约束(u...
    99+
    2023-09-03
    mysql 六大约束条件 三大表关系 视图和索引 mysql正则
  • MySQL数据库索引和事务
    目录1. 索引 1.1 概念 1.2 作用 1.3 索引的原理 1.3.1 减少磁盘的访问次数是构建索引的核心思想 1.3.2 B+ 树适用实现索引的底层 1.4 适用场景 1.5 ...
    99+
    2024-04-02
  • Java面试题冲刺第二十八天--数据库(5)
    目录面试题1:MySQL数据库cpu飙升到500%的话你会怎么处理?面试题2:什么是存储过程?有哪些优缺点优点在数据库中集中业务逻辑使数据库更安全较快的执行速度缺点不可移植性复杂存储...
    99+
    2024-04-02
  • 数据库事务
    事务的四个特性 (ACID) ,分别是原子性( Atomicity), 一致性( Consistency), 隔离性( Isolation), 持久性( Durability)。一致性是事务的目的,原子性,...
    99+
    2024-04-02
  • 【MySQL基础篇】MySQL数据库安装教程
    ✅作者简介:大家好我是hacker707,大家可以叫我hacker,新星计划第三季python赛道Top1🏆 📃个人主页:hacker707的csdn博客 ...
    99+
    2023-09-06
    数据库 mysql
  • MySQL数据库事务的示例分析
    小编给大家分享一下MySQL数据库事务的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!事务特点:ACID从业务角度出发,...
    99+
    2024-04-02
  • MySQL数据库事务原理及应用
    目录1 事务的使用1.1 事务概念1.2 事务的提交1.3 事务的常见操作2 事务隔离2.1 事务并发时出现的问题2.2 事务隔离级别1 事务的使用 1.1 事务概念 事务就是一组DML语句组成,这些语句在逻辑上存在相关...
    99+
    2023-04-27
    MySQL数据库事务 MySQL数据库事务管理
  • MySQL数据库的触发器和事务
    目录一、触发器概念二、 触发器的操作触发器的增删改操作触发器的查看删除操作三、事务概念四、事务的操作基本流程基础操作事务的提交方式事务的隔离级别隔离操作一、触发器 概念 触发器是SQ...
    99+
    2022-11-13
    MySQL数据库触发器 MySQL数据库事务
  • MySQL数据库十大优化技巧详解
    本篇内容主要讲解“MySQL数据库十大优化技巧详解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL数据库十大优化技巧详解”吧!  1、优化你的MySQL...
    99+
    2024-04-02
  • 第8章 MySQL 选择数据库教程
    在帅哥连接到 MySQL database后,可能有多个可以操作的database,所以帅哥需要选择帅哥要操作的database。 从命令提示窗口中选择MySQLdatabase 在 mysql> ...
    99+
    2023-09-03
    数据库 mysql php
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作