MySQL的事务处理(Transation)和自动执行(AutoCommit)与提交类型(Completion)

Transaction事务使用了解 ​ 在wiki的解释中,事务是一组单元化的操作,这组操作可以保证要么全部成功,要么全部失败(只要有一个失败的操作,就会把其他已经成功的操作回滚)。​ 这样的解释还是不够直观,看下面一个经典的例子。假设有两个银行账户A和B,现在A要给B转10块钱,也就是转账。从A的账户中扣掉10块钱在B的账户中添加10块钱​ 通过事务机制可以保证数据库的一致性和完整性。 阅读详情

1、事务(transaction)
事务在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务主要用于处理操作量大,复杂度高的数据。如果你要删除一条主表信息,而主表有多个从表的时候,你需要有步骤地删除明细后再删除主表信息,这个过程极其容易出错,那么这个时候就是用事务才处理是最合适的了。

2、事务(Transcation)的用法

事务开始(start transaction or begin)
提交(commit)
回滚(rollback)

3、MYSQL支持的引擎(InnoDB)

show engines;

在这里插入图片描述

4、自动执行(AutoCommit)与提交类型(Completion)
使用事务有两种方式,分别为隐式事务和显式事务。隐式事务实际上就是自动提交,Oracle 默认不自动提交,需要手写 COMMIT。在MySQL中,自动提交(autocommit)在支持事务(transaction)的引擎中,若autocommit=true,则不需要commit的情况下直接提交语句形成永久性修改,Mysql默认打开autocommit,也可以通过配置设置。

set autocommit=0;(AutoCommit Off)
set autocommit=1;(AutoCommit On)
set completion_type=0;(No Chain)
set completion_type=1;(Chain)
set completion_type=2;(Release)

也可以通过语句查询当前配置

show variables like '%autocommit%';
show variables   like '%completion%';

在这里插入图片描述
在这里插入图片描述
5、验证例子

mysql> BEGIN;
    -> INSERT INTO test SELECT '关羽';
    -> COMMIT;
    -> BEGIN;
    -> INSERT INTO test SELECT '张飞';
    -> INSERT INTO test SELECT '张飞';
    -> ROLLBACK;
    -> SELECT * FROM test;
    -> //
Query OK, 0 rows affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0
Query OK, 0 rows affected (0.02 sec)
Query OK, 0 rows affected (0.03 sec)
Query OK, 1 row affected (0.03 sec)
Records: 1  Duplicates: 0  Warnings: 0
ERROR 1062 (23000): Duplicate entry '张飞' for key 'PRIMARY'

mysql> select * from test;//

当前窗口结果:
在这里插入图片描述
新建窗口结果:
在这里插入图片描述
结论:由于test表中name的唯一性约束,看代码的话,两个"张飞"执行后(无论有无触发主键约束),实际由于第二个"张飞"触发了唯一性约束异常,所以我认为事务会跳出,所以在当前连接中,test表中可以看到一个张飞,实际上第二个事务,并没有提交成功。

接下来,我们试试正常提交的数据。

mysql> BEGIN;
    -> INSERT INTO test SELECT '关羽';
    -> COMMIT;
    -> BEGIN;
    -> INSERT INTO test SELECT '张飞';
    -> INSERT INTO test SELECT '刘备';
    -> ROLLBACK;
    -> //
Query OK, 0 rows affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0
Query OK, 0 rows affected (0.02 sec)
Query OK, 0 rows affected (0.02 sec)
Query OK, 1 row affected (0.03 sec)
Records: 1  Duplicates: 0  Warnings: 0
Query OK, 1 row affected (0.04 sec)
Records: 1  Duplicates: 0  Warnings: 0
Query OK, 0 rows affected (0.04 sec)


mysql> select * from test;//

当前窗口结果:
在这里插入图片描述
新建窗口结果:
在这里插入图片描述

结论:对比这次的测试结果,所以我认为第一个测试,并没有执行rollback,而是跳出事务处理异常机制了。

因为mysql默认打开了autocommit,那么我想验证下在无显示事务的情况下(即无begin开头),两个"张飞"是如何自处的?

mysql> BEGIN;
    -> INSERT INTO test SELECT '关羽';
    -> COMMIT;
    -> INSERT INTO test SELECT '张飞';
    -> INSERT INTO test SELECT '张飞';
    -> ROLLBACK;
    -> //
Query OK, 0 rows affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0
Query OK, 0 rows affected (0.02 sec)
Query OK, 1 row affected (0.05 sec)
Records: 1  Duplicates: 0  Warnings: 0

ERROR 1062 (23000): Duplicate entry '张飞' for key 'PRIMARY'
mysql> select *from test;//

当前窗口结果:
在这里插入图片描述
新建窗口结果:
在这里插入图片描述

结论:其实看执行结果就知道了,第1个"张飞"作为单独的事务已经执行成功了,第二个"张飞"由于触发了主键约束所以执行失败了。除了显示事务外,有没有办法在没结束事务前(无Commit)前,可以让两个"张飞"合并成一个事务呢?
可以设置set completion_type=1;(chain),也就是说无论几个"张飞"在还没提交之前,都是一个事务。

代码与上面的一样。

mysql> SET @@completion_type = 1;
    -> BEGIN;
    -> INSERT INTO test SELECT '关羽';
    -> COMMIT;
    -> INSERT INTO test SELECT '张飞';
    -> INSERT INTO test SELECT '张飞';
    -> ROLLBACK;
    -> //
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 1 row affected (0.02 sec)
Records: 1  Duplicates: 0  Warnings: 0
Query OK, 0 rows affected (0.02 sec)
Query OK, 1 row affected (0.02 sec)
Records: 1  Duplicates: 0  Warnings: 0
ERROR 1062 (23000): Duplicate entry '张飞' for key 'PRIMARY'

当前窗口结果:
在这里插入图片描述
新建窗口结果:
在这里插入图片描述
结论:因为我设置了set completion_type=1(chain),相当与在第一个"张飞"前加了begin,所以第二个"张飞"由于触发了主键约束所以导致事务失败,插入数据失败。

【Chipyard】Gemmini快速上手 Gemmini 加速器在 ResNet50 推理任务中表现出计算密集型优势,核心操作周期分布符合深度学习模型特征,推理预测流程完整且测试通过,为后续硬件优化和模型部署提供了有效参考。 阅读详情

相关推荐

从宏观到街道:如何利用七普数据为WorldPop人口栅格做“本地化”校准?

本文探讨了如何利用第七次全国人口普查(七普)数据对WorldPop人口栅格进行本地化校准,以提高街道级别的人口分布精度。通过分析数据偏差、选择适当的技术路线和工具(如Arcgis和栅格计算器),文章详细介绍了从宏观到街道的校准实践,帮助规划公共卫生资源和优化城市基础设施。

janckywong963的专栏 512

关于mysql的参数autocommit

背景知识: mysql事务支持的引擎是InnoDB 默认情况下autocommit的值为1 1.首先准备一张innodb引擎的测试表: CREATE TABLE `test` ( `id` int(11) NOT NULL ) ENGINE=InnoDB; INSERT INTO `test` VALUES ('1'); INSERT INTO `test` VALUES ('3');...

wx145的博客 3万+

回归预测 | MATLAB实现基于贝叶斯线性回归(Bayesian Regression)的多变量输入回归预测

回归预测 | MATLAB实现基于贝叶斯线性回归(Bayesian Regression)的多变量输入回归预测

机器学习之心的博客,关注并私信文章链接,获取对应文章源码和数据。 2199

Mysql中默认自动事务autocommit关闭和开启方式、rollback回滚恢复数据的使用方法

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档。

睡不醒的每天 8172

物理AI:连接数字智能与物理世界的下一代人工智能范式

物理AI正在推动人工智能从纯数字领域向物理世界扩展,实现比特到原子的智能跃迁。与传统AI相比,物理AI具有三大核心差异:1)在物理环境中运行;2)处理多模态传感器输入;3)产生可改变物理状态的输出。其技术栈包含感知层(多模态融合)、决策层(边缘计算)、执行层(运动控制)和连接层(5G/6G通信)。关键技术挑战包括:实时多传感器融合、物理约束下的决策规划、以及高精度执行控制。物理AI的发展面临实时性保障、安全验证等核心挑战,但其在机器人、自动驾驶等领域的应用潜力巨大,正成为智能技术落地的关键突破口。

fudaihb的博客 1712

PCIE的MSI中断处理机制与优化策略

PCIe设备的。

xiaoheshang_123的博客 516

autocommit自动提交事务及commit、rollback用法

(1)修改my.cnf配置文件:添加autocommit=0或者autocommit=OFF。(2)查看ssh连接会话1的autocommit状态为设置后的OFF关闭自动提交模式。#关闭自动提交模式:autocommit=OFF 或者 autocommit=0。(3)查看ssh连接会话2的autocommit状态为默认的ON开启自动提交状态。#开启自动提交模式:autocommit=ON 或者 autocommit=1。autocommit的值为OFF,表示系统关闭自动提交模式。(2)重启mysql服务。

qq_39495959的博客 1532

【GEE数据库】WRF常用数据集总结

【GEE数据库】WRF常用数据集总结

WW、forever的博客 635

autocommit

autocommit 一、概念 事务自动提交设置,默认为1,即除非显示声明一个事务的开始,否则每一个查询都会被当做独立的事务被处理 默认情况下,数据库处于自动提交模式。每一条语句处于一个单独的事务中,在这条语句执行完毕时,如果执行成功则隐式的提交事务,如果执行失败则隐式的回滚事务 关闭自动提交的原因,事务作为一个独立处理最小单元,往往需要处理一系列连续的数据操作,这些操作被视为一个整体,

走在命运的左岸 6267

RT-DETR-R18 上下文信息融合:引入全局特征提升遮挡目标检测

"""轻量化全局特征提取器(2层Transformer编码器)"""# 特征投影层(将多尺度特征统一维度)# 轻量化Transformer编码器(分组卷积优化)# 全局特征池化(输出 [bs, hidden_dim])# local_features: 多尺度特征列表 [C3, C4, C5],各 [bs, c, h, w]# 统一投影至 hidden_dim 并展平为序列# Transformer编码全局上下文# 全局池化得到全局向量。

走向CTO的路上... 495

WblockCloneObjects克隆一个图纸内的实体包括块参照,同名块参照的处理

public static void HeBingTu2(double lieJu, List<string> filePaths) { Document doc = Application.DocumentManager.MdiActiveDocument; Database db = doc.Database; using (DocumentLock docLock = doc.Lock...

1108

mysql事务和性能_MySQL事务编程性能和问题分析[开发必看]

没有一句废话,满满的干货,直接进入分析:1.在循环中提交的问题很多开发人员非常喜欢在循环中进行事务提交,下面演示一个他们经常写的一个存储过程示例,如下所示:DROP PROCEDURE IF EXISTS load1;CREATE PROCEDURE load1(count INT UNSIGNED)BEGINDECLARE s INT UNSIGNED DEFAULT 1;DECLARE c C...

weixin_30181209的博客 319

AgentScope实战训练营-Java开发HITL人机协作AI应用完整指南

本文手把手带你从零搭建一个基于 Spring Boot WebFlux + AgentScope + 通义千问的人机协作(HITL)AI 聊天应用。项目涵盖流式对话、工具调用、高危操作确认、对话中断、动态 MCP 工具接入、中英文双语界面等完整功能。文章从环境准备、pom.xml 配置、DTO 数据模型、Hook 机制、AgentService 核心服务、ChatController 接口到前端 HTML/CSS/JS 实现,逐一讲解每行代码的设计意图,并附带 REST API 接口说明、测试场景、常见问题

program哲学 713

mysql innodb 事务_MySQL Innodb事务编程问题和处理

1.在循环中提交的问题很多开发人员非常喜欢在循环中进行事务提交,下面演示一个他们经常写的一个存储过程示例,如下所示:DROP PROCEDURE IF EXISTS load1;CREATE PROCEDURE load1(count INT UNSIGNED)BEGINDECLARE s INT UNSIGNED DEFAULT 1;DECLARE c CHAR(80) DEFAULT REPE...

weixin_35456296的博客 143

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

MySQL数据库,@Transational标签无效的原因及处理方法

原因一: MySQL默认操作模式就是autocommit自动提交模式。 通过以下命令可以查看当前autocommit模式 show variables 'autocommit'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | autocommit | ON | +-...

ValenCheng的专栏 753

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

[MySQL]事务的浅谈

对于mysql 事务的基本知识

weixin_51654781的博客 746

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

mysql中,执行delete语句时出现Lock wait timeout exceeded问题

问题描述: 当我插入一条记录时,在调用save方法的时候出现了异常(记录重复了),导致了后面的commit语句不能执行了。这时我在数据库中删除重复记录时发现该表已经被锁上了。即出现错误。但过了一会再次执行delete,就能成功删除记录了。 原因分析: 由于commit语句没有执行到,即事务没有提交成功,表还是被锁着的。只能等锁超时了,才能再次执行delete等操作。 解决办法: 1.遇到...

weixin_30323631的博客 1008

Mysql——事务详解(Transaction)

事务:是一个完整的业务逻辑单元,不可再分,和事务相关的语句只有DML语句(insert,update,delete)。注意:rollback和commit之后事务自动结束。自动提交的开启和关闭开启和关闭自动提交如下: 4.事务的隔离级别 4.1事务存在的常见问题 隔离级别分类:查看隔离级别查看会话级当前的隔离级别:select @@session.transaction_isolation; 查看全局级当前的隔离级别:select @@global.transaction_isolation;设置隔离级别

m0_62969222的博客 1195

web15_transaction

web transaction概述mysql 的事务事务操作环境准备代码演示JDBC的事务事务对象事务处理ThreadLocal事务特性并发访问的问题隔离级别 概述 事务:指逻辑上的一组操作,组成这组操作的各个单元要么全都成功,要么全都失败。 事务作用:就是保证在一个事务中的多个操作全都成功,或者全都失败。 mysql 的事务 事务操作 sql 描述 start transac...

laonxs的博客 213

第三十一章:事务基础知识

第三十一章:事务基础知识

wcy_0522的博客 197

java jdbc 事务_Java中的JDBC事务解析

Java中的JDBC事务解析事务事务是一步或多步组成操作序列组成的逻辑执行单元,这个序列要么全部执行,要么则全部放弃执行。事务的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(IsoIation)和持续性(Durability)原子性(Atomicity):事务应用最小的执行单元,不可再分。是事务中不可再分的最小逻辑执行体。一致性(Consistency):事务的...

weixin_39575410的博客 254

jquery事件绑定

1.点击事件 <body> <button> <strong>click to change div content</strong> </button> <div>娱乐新闻:进击的巨人更新啦</div> <script src="./js/jquery-3.1.1.js"></script> <script type="text/javascript"&g

zwb1365237878的博客 274

什么是事务(transaction)?它有什么好处

  为了完成对数据的操作,企业应用经常要求并发访问在多个构件之间共享的数据。这些应用在下列条件下应该维护数据的完整性(由应用的商务规则来定义): 分布式访问一个单独的数据资源,以及从一个单独的应用构件访问分布式资源。 在这种情况,可能要求在(分布式)资源上的一组操作被当作一个工作单元(unit)。在一个工作单元中, 操作的所有部分一起成功或失败并恢复。在下面的情况下这个问题更加复杂: 通过一...

weixin_33805992的博客 793

MySQL的auto commit属性

mysql的auto commit选项autocommit生效范围事务不使用事务更改autocommit配置更改配置文件热更改配置应用程序更改配置 autocommit生效范围 事务 不使用事务 更改autocommit配置 更改配置文件 热更改配置 应用程序更改配置 ...

三枪八路的博客 2291

Transaction 事务简单详解

Transaction 也就是所谓的事务了,通俗理解就是一件事情。从小,父母就教育我们,做事情要有始有终,不能半途而废。事务也是这样,不能做一半就不做了,要么做完,要么就不做。也就是说,事务必须是一个不可分割的整体,就像我们在化学课里学到的原子,原子是构成物质的最小单位。于是,人们就归纳出事务的第一个特性:原子性(Atomicity)。 特别是在数据库领域,事务是一个...

Fanqi0928的博客 861

autocommit(自动提交) mysql

1、什么是autocmomit(自动提交)? 2、用在哪里? 3、如何修改? 1、autocommit是mysql中的InnoDb数据表特有的语句。(只有在表引擎=InnoDb时,autocommit才会生效) 原理:在InnoDb表中,所有的语句都是需要commit后,才会在真实数据库中生效。 eg: InnoDb数据库引擎 :     update tablenam

疯狂的简洁 1万+
上一篇: MarkDown的使用方法
下一篇: ARTS 第四周
Ken_Li_Lsq
博客等级 码龄14年 22粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值