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

news2025/1/19 22:19:53

目录

 前言:

 介绍事务:

 控制事务:

 事务四大特性:

 并发事务问题:

 事务隔离级别:

总结:


 前言:

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

 介绍事务:

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

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

举例:

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

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

控制事务:

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

1.查看/设置事务提交方式

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

2.提交事务

COMMIT;

3.回滚事务

ROLLBACK;

控制事务案例:

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

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

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

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

 我们此时如果执行这些语句:
结果:

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

提交事务(commit):

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

commit;

结果:

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

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

操作结果:

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

1.开启事务

START TRANSACTION 或 BEGIN;

2.提交事务

COMMIT;

3.回滚事务

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 ;

结果:

 事务四大特性:

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

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

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

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

并发事务问题:

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

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

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

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

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

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

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

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

事务隔离级别:

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

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

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

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

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

 语法:

1.查看当前事务隔离级别

SELECT @@TRANSACTION_ISOLATION;

2.设置事务隔离级别

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

SESSION与GLOBAL区别:

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

总结:

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

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

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

  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/625752.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

车间如何做好“生产计划”,打造高效运营的智能工厂

新形势下,面对外部不断变化的市场需求、供应链下游企业管理升级需求以及持续上涨的人力成本,传统工厂模式必须要变革才能更好地发展。热潮之下,企业纷纷规划建设智能工厂。那么,新工厂规划如何避免投入浪费,少走弯路&a…

Linux——进程间通信,信号量的使用+小demo(C语言)

一.什么是信号量呢?用途又是什么呢? 信号量就是解决进程之间竞争资源的情况,比如:我们在宿舍用的公共洗衣机,我们只有当它空闲的时候,我们才可以去使用它,当别人看到洗衣机在使用的时候&#xf…

LVS负载均衡群集部署(DR模式)

一.DR模式 LVS负载均衡群集部署 ipvsadm 工具选项说明: 工具选项作用-A添加虚拟服务器-D删除整个虚拟服务器-s指定负载调度算法(轮询:rr、加权轮询:wrr、最少连接:lc、加权最少连接:wlc)-a表示…

clickhouse-MergeTree

创建建表语句 create table t_order_mt(id UInt32,sku_id String,total_amount Decimal(16,2),create_time Datetime ) engine MergeTreepartition by toYYYYMMDD(create_time)primary key (id)order by (id,sku_id); 插入测试数据 insert into t_order_mt(id,sku_id,total_…

chatgpt赋能python:Python数据分析必备工具:Pandas

Python数据分析必备工具:Pandas Python作为一门流行的编程语言,广泛应用于数据科学领域。而Pandas作为Python语言下的数据分析库,被广泛地应用于数据处理、数据分析、数据可视化等方面。本文将介绍如何快速地入门Pandas并进行数据分析。 什…

《统计学习方法》——逻辑斯谛回归与最大熵模型(下)

最大熵模型 极大似然估计 下面证明对偶函数的极大化等价于最大熵模型的极大似然估计。 极大似然估计的思想就是通过概率最大化来求出最符合的分类。对应的步骤为: 根据训练集,写出不同分类下的概率函数将不同分类下的概率函数进行汇总,写…

[hsctf 2023] crypto,pwn,rev部分

刚完了天津又来个衡水,这个大部分题比较简单,最后两天整了3个crypto有点意思. crypto double-trouble 给了密文 Hvwg gvcizr bch ps hcc vofr. Wb toqh, W kwzz uwjs wh hc mci fwuvh bck! Hvs tzou wg hvs tczzckwbu: OmqemdOubtqdeMdqOaax Vcksjsf, wh wg sbqcrsr gc mci …

刷脸登录(人工智能)

刷脸登录 理解刷脸登录的需求 理解刷脸登录的开发流程实现刷脸登录功能 浅谈人工智能 人工智能的概述 人工智能(Artificial Intelligence),英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门…

chatgpt赋能python:Python怎么下pip:简单又方便的工具

Python怎么下pip:简单又方便的工具 Python 是一门广泛应用的高级编程语言,它设计的初衷是让程序员更加愉悦地编写代码,同时提供了多种强大的库和框架。其中,pip 是最为常见的第三方包管理工具,本文将为你介绍如何下载…

uniapp实现主题切换功能实现第一种方式(scss变量+vuex)

随着用户端体验的不断提升,很多应用在上线的时候都要求做不同的主题,最基本的就是白天与夜间主题。 就像b站app主题切换,像这样的 uniapp因为能轻松实现多端发布而得到很多开发者的青睐,但每个端的实现也有可能不同,现…

NLP学习笔记四-word embeding

NLP学习笔记四-word embeding word embeding就是一块重头戏了,因为这里做完,我们的数据处理部分也基本上收尾了。 下面我们附上一张图: 如上图,word embeding实在我们one-hot word之后才可以进行的,每一步处理技术都是…

NVM安装(管理Node.js版本)

NVM可以在一台电脑上安装多个版本Node.js,并且可以一条指令随时下载或切换版本 下载安装 github下载地址:https://github.com/coreybutler/nvm-windows/releases 一路next,注意修改安装路径即可(不要安装在有中文名称的目录下&am…

Latex图表制作:关于EPS文件转PDF文件及PDF裁剪自动化的Shell脚本制作

关于EPS文件转PDF文件及PDF裁剪自动化的Shell脚本制作 前言一、EPS文件转PDF文件1. 过去的科研绘图方案2. 未来的科研绘图方案 二、使用步骤1. 单例操作a. 安装epstoolb. 切除EPS文件白边并保存临时EPS文件d. 将EPS文件转换为PDF文件 2. 批处理操作a. Shell 脚本b. 使用说明 参…

贝叶斯公式的理解与推导(简单版本)

院子里面有条狗,过去几十年中,平均100天狗会叫50天,平均100天被偷盗一次,偷盗时有90%概率狗会叫,请问当狗叫的时候,是小偷入侵的概率有多大? 分析: 狗叫为独立事件A,偷盗…

chatgpt赋能python:Python如何将PDF转换为Word文档

Python如何将PDF转换为Word文档 在现代电脑使用的日常工作中,PDF格式的文档已经变得很普遍。这种文件格式十分方便,但是有时候可能需要将PDF文件转换为Word文档。幸运的是,Python提供了多种方法来实现这个目标。 为什么要将PDF转换为Word&a…

6. 常见的文件编码方式及查看网页源码的编码方式

6. 常见的文件编码方式及查看网页源码的编码方式 文章目录 6. 常见的文件编码方式及查看网页源码的编码方式1. 编码的由来2. 编码的作用3. 常见的编码方式4. ASCII码5. Unicode符号集6. UTF-87. GB23128. GBK9. ISO-8859-110. 文件编码查看方式11. 网页编码查看方式12. 留言 1.…

【学习日记2023.6.9】之 SpringCloud入门

文章目录 SpringCloud1. 认识微服务1.1 单体架构1.2 分布式架构1.3 微服务1.4 SpringCloud1.5 总结 2. 服务拆分和远程调用2.1 服务拆分原则2.2 服务拆分示例2.2.1 导入Sql语句2.2.2 导入demo工程 2.3 实现远程调用案例2.3.1 案例需求:2.3.2 注册RestTemplate2.3.3 …

计算机组成原理——总线,输入输出系统

文章目录 **一 总线概述****1 总线基本概念****1.1 定义****1.2 总线设备****1.3 总线特性** **2 总线的分类****2.1 片内总线****2.2 系统总线****2.3 I/O总线****2.4 通信总线** **3 系统总线的结构****3.1 单总线结构****3.2 双总线结构****3.3 三总线结构** **4 常见的总线…

TextDiffuser: Diffusion Models as Text Painters

TextDiffuser: Diffusion Models as Text Painters (Paper reading) Jingye Chen, HKUST, HK, arXiv2023, Cited: 0, Code, Paper 1. 前言 扩散模型因其出色的生成能力而受到越来越多的关注,但目前在生成准确连贯的文本方面仍存在困难。为了解决这个问题&#xf…

chatgpt赋能python:Python怎么进行302跳转以提高SEO

Python怎么进行302跳转以提高SEO 在进行搜索引擎优化时,重点是提高网站的排名和流量。其中一个关键的因素就是网页的重定向。在Python中,使用302重定向可以为您的网页提供更好的SEO效果。 什么是302跳转? 302跳转指的是HTTP状态码302 Foun…