前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【MySql】MySql事务常见操作

【MySql】MySql事务常见操作

作者头像
平凡的人1
发布于 2023-10-15 04:32:48
发布于 2023-10-15 04:32:48
25300
代码可运行
举报
运行总次数:0
代码可运行

准备工作

  • 将mysql的默认隔离级别设置成读未提交
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
set global transaction isolation level read uncommitted;

注意:设置完毕之后,需要重启终端,进行查看

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select @@tx_isolation  
  • 创建测试表
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> create table if not exists account(
    -> id int primary key,
    -> name varchar(50) not null default '',
    -> blance decimal(10,2) not null default 0.0
    -> )engine=InnoDB default charset=utf8;
Query OK, 0 rows affected (0.22 sec)

并且同时启动两个客户端,即两个SSH渠道。

事务常见操作方式

先查看当前事务的提交方式:这里我们之前设置成自动提交了

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
show variables like 'autocommit';

启动事务:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- 方式一
start transaction;

-- 方式二
begin;

创建一个保存点:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
savepoint s1;

现在,我们给一端插入数据并且设置保存结点:

此时的account表中的数据如下:

现在,事务进行回滚rollback to s3:

此时的account表中的王五这条数据就没有了:

如果回滚到上面设置的保存点s1,那么account表中的数据自然就没有了。这就是回滚事务。

结束事务:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
commit;
  • 这上面的操作是设置保存点的,如果没有保存点

此时查看表account的数据:数据全没了

直接rollback,把从开始启动事务的所有操作全部丢弃。

  • 事务持久化

此时再来查看表account:

此时即使后续在进行rollback操作,也没有影响了。

此时的数据永久化保存在数据库里了。也就是事务一经提交,就没办法再回滚了。也就是回滚只能在事务运行进行的期间,事务提交之后,无法回滚

  • **事务运行期间出现异常,客户端崩溃,MySQL自动会回滚 **

先来看一下现在有一个表account,以及两个客户端,也就是以下的情况:(注意,事务是自动提交的show variables like ‘autocommit’;)

现在来看一下客户端崩溃,自动回滚的情况:

ctrl + \ 异常终止MySQL

另外,只要把事务统一commit之后,这个数据就直接被插入到数据库中,并不会因为客户端崩溃这种情况而出现数据回滚。

  • 证明begin操作会自动更改提交方式,不会受MySQL是否自动提交影响

关闭自动提交

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
set autocommit=1;

插入数据commit后客户端崩溃:

此时的田七这条数据是存在的了

  • 证明单条 SQL 与事务的关系

场景一:先关闭自动提交

account表中的数据如下:

现在执行单sql语句:数据被删除,但是如果aborted,当前的数据会自动回滚!

场景二:先打开自动提交

表account的数据如下:

现在执行单sql,aborted之后,删除就是删除了

autocommit会影响之前的单sql,每条sql就相当于事务,虽然没有写begin,没有写commit。单sql执行的时候,如果autocommit是off的,只是事务执行中,当这个客户端崩溃的时候,数据会回滚。如果autocommit是on的,信息直接提交到数据库进行持久化。

单sql也是事务,是自动提交的。如果autocommit是off关闭的,当sql执行后再commit之后数据就是持久化了。

总结

结论

只要输入begin或者start transaction,事务便必须要通过commit提交,才会持久化,与是否设置set autocommit无关。 事务可以手动回滚,同时,当操作异常,MySQL会自动回滚 对于 InnoDB 每一条 SQL 语言都默认封装成事务,自动提交,除非把autocommit改成OFF。(select有特殊情况,因为MySQL 有 MVCC ) 从上面的例子,我们能看到事务本身的原子性(回滚),持久性(commit)

事务操作注意事项

如果没有设置保存点,也可以回滚,只能回滚到事务的开始。直接使用 rollback(前提是事务还没有提交) 如果一个事务被提交了(commit),则不可以回退(rollback) 可以选择回退到哪个保存点 InnoDB 支持事务, MyISAM 不支持事务 开始事务可以使 start transaction 或者 begin,结束使用commit,建议使用begin,毕竟比较容易记住

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-06-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【MySQL】 事务的概念及ACID属性和使用
一个 MySQL 数据库,可不止你一个事务在运行,同一时刻,甚至有大量的请求被包装成 事务,在向 MySQL 服务器发起事务处理请求。而每条事务至少一条 SQL ,最多很多 SQL ;这样如果大 家都访问同样的表数据,在不加保护的情况,就绝对会出现问题。甚至,因为事务由多条 SQL 构成,那 么,也会存在执行到一半出错或者不想再执行的情况,那么已经执行的怎么办呢?
IsLand1314
2025/05/28
1450
【MySQL】 事务的概念及ACID属性和使用
初识MySQL · 事务 · 上
前文我们介绍了MySQL中的索引,通过磁盘引出MySQL与磁盘交互的基本单位是16KB,而对于16KB来说它是一个结构体,并且在Innodb存储引擎里面是通过B+树的形式进行管理的,那么具体的细节内容各位可移步上文阅读。
_lazy
2025/06/13
570
初识MySQL · 事务 · 上
事务、视图、锁表
事务(TRANSACTION)是作为单个逻辑工作单元执行的一系列操作 多个操作作为一个整体向系统提交,要么都执行、要么都不执行 事务是一个不可分割的工作逻辑单元
用户9979303
2022/10/28
7210
MySQL(三)事务隔离
在MySQL中,事务支持是在引擎层实现的,并不是所有的引擎都支持事务,如MySQL原生的MyISAM引擎就不支持事务,这也是MyISAM被InnoDB取代的重要原因之一.
JNJYan
2019/03/04
4990
Mysql之事务(上)
事务的存在是为了保证数据的完整性、一致性、隔离性和持久性(即ACID原则),尤其在面对错误、并发和系统崩溃等不确定性时,能够确保数据库处于一个可靠和一致的状态。
猫咪-9527
2025/04/02
1180
Mysql之事务(上)
全面分析与总结 MySQL 事务中那些事儿
在日常开发中,我们常用的存储引擎有 InnoDB 和 MyISAM 两种存储引擎。然而 MyISAM 是不支持事务操作的。
兔云小新LM
2020/12/11
5580
全面分析与总结 MySQL 事务中那些事儿
mysql系列——事务(Transaction)详解
这个其实用脚趾头想想也知道它的重要性,举个简单的例子: 一个用户提交了一个订单,那么这条数据包含了两个信息,用户信息 和购买的 商品信息,我需要把他们分别存到 用户表 和 商品表,如果不采用事务,可能会出现,商品信息插入成功,而用户信息没有,这时候就会出现无主商品了,用户付了钱,却得不到商品,这就尴尬了,而如果采用事务,就可以保证,用户信息 和 商品信息 都必须插入成功,该次事务才算成功,那就不会出现这种问题了
solve
2019/10/30
6520
MySQL从删库到跑路_高级(七)——事务和锁
A、原子性(Atomicity) 表示组成一个事务的多个数据库操作是一个不可分隔的原子单元,只有所有的操作执行成功,整个事务才提交,事务中任何一个数据库操作失败,已经执行的任何操作都必须撤销,让数据库返回到初始状态。 B、一致性(Consistency) 事务操作成功后,数据库所处的状态和它的业务规则是一致的,即数据不会被破坏。 C、隔离性(Isolation) 在并发数据操作时,不同的事务拥有各自数据空间,它们的操作不会对对方产生干扰。数据库规定了多种事务隔离级别,不同隔离级别对应不同的干扰程度,隔离级别越高,数据一致性越好,但并发性越弱。 D、持久性(Durabiliy) 一旦事务提交成功后,事务中所有的数据操作都必须被持久化到数据库中,即使提交事务后,数据库马上崩溃,在数据库重启时,也必须能保证能够通过某种机制恢复数据。
良月柒
2019/03/19
7630
MySQL 事务
  事务(Transaction),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言(如 SQL,C++ 或 Java)书写的用户程序的执行所引起,并用形如 begin transaction 和 end transaction 语句或函数调用来界定。事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。一般用来管理 insert,update,delete 语句。
Demo_Null
2020/09/28
2.3K0
MySQL 事务
MySQL事务大揭秘:事务概述和隔离级别解析
开始之前推荐一篇实用的文章:《基于生成式人工智能的三维模型自动化设计与优化》,作者:【申公豹】。
Lion 莱恩呀
2024/12/01
2020
MySQL事务大揭秘:事务概述和隔离级别解析
MySQL事务
事务就是保证一组数据库操作要么全部成功,要么全部失败。MySQL中,事务的支持是在引擎层实现的。InnoDB支持事务,MyISAM不支持事务,这也是InnoDB逐渐取代MyISAM的原因之一。
shysh95
2022/02/16
9220
MySQL事务
MySQL事务处理操作
MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务.
兔云小新LM
2019/08/02
8940
Mysql事物隔离
最近工作内容需要向一张表里面写入数据,有两个实现方法,每种方法会运行得到一份结果,两个结果的key会有大部分重复,后面跟的value会有不同。 表格中只允许两个结果中其中的一个key存在,二者选其一,只能更新替代。在往表里写的程序是没有错误的,但最终从表里查询的时候,发现很多key有两份数据结果,思考其原因,可能跟事物隔离有关系,这里讲解下事物及事物隔离。
用户3578099
2019/08/15
1.7K0
MySQL基础篇8终结篇 mysql的基础问题总结
设置: transaction-isolation 的值设置成 READ-COMMITTED
历久尝新
2020/05/21
1.4K0
05 基础的数据操作
以上4 种操作又简称为 CURD (Create ,Update ,Retrieve ,Delete )
张哥编程
2024/12/13
1150
MySQL事务
事务(Transaction),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并用形如begin transaction和end transaction语句(或函数调用)来界定。事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。
星哥玩云
2022/09/15
4.3K0
MySQL事务
Linux——MySQL事务
当客户端A检查还有一张票时,将票卖掉,还没有执行更新数据库时,客户端B检查了票数,发现大于0,于是又卖了一次票。然后A将票数更新回数据库。这是就出现了同一张票被卖了两次。 CURD满足什么属性,能解决上述问题?
有礼貌的灰绅士
2025/05/15
660
Linux——MySQL事务
Mysql进阶垫脚石 -- 到底什么是数据库事务?
事务(Transaction)是并发控制的基本单位。所谓的事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持久性)属性。
陈哈哈
2020/07/06
8060
Mysql进阶垫脚石 -- 到底什么是数据库事务?
Mysql中的事务
2.为什么要使用事务: 事务具备的ACID特性,是我们使用事务的原因,在我们日常的业务场景中有⼤量的需求要⽤事务来保证。支持事务的数据库能够简化我们的编程模型, 不需要我们去考虑各种各样的潜在错误和并发问题,在使⽤事务过程中,要么提交,要么回滚,不⽤去考虑⽹络异常,服务器宕机等其他因素,因此我们经常接触的事务本质上是数据库对 ACID 模型的⼀个实现,是为应用层服务的。  因此在使用数据库过程中,对于修改只要提交成功,数据就可以安全的保存,只要回滚就可以回到,保存点事务之初
用户11305962
2024/10/09
2060
Mysql中的事务
第13章_事务基础知识
🧑个人简介:大家好,我是 shark-Gao,一个想要与大家共同进步的男人😉😉
程序员Leo
2023/08/02
2350
第13章_事务基础知识
相关推荐
【MySQL】 事务的概念及ACID属性和使用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验