文档章节

MySQL 到底支不支持事务嵌套?

宇润
 宇润
发布于 2018/10/17 13:12
字数 460
阅读 61
收藏 4

最近开发中遇到了使用MySQL,多次开启事务,出现了数据错乱问题,伪代码如下:

begin;
 
# 操作1
 
begin;
 
# 操作2
 
rollback;

执行完后出现了操作1的数据真正写入,只有操作2的数据回滚了。在第一个事务没有提交或回滚时,再开启第二个事务时,会自动提交第一个事务。

这明显不符合心理预期,而且也无法回滚一部分操作。那么问题来了,MySQL 支不支持事务嵌套呢?

这个问题很难准确回答支持还是不支持!

首先,调用多次begin的写法,在MySQL里肯定是无法首先事务嵌套的。经过群内一位朋友的提醒,了解到MySQL中有一个叫savepoint和rollback to的语句。

示例代码:

DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
 
begin;
 
insert into `test`(`name`) values('111');
 
SAVEPOINT p1;
 
insert into `test`(`name`) values('222');
 
ROLLBACK TO p1;
 
commit;

最终执行结果,test表中只有111这个数据,实现了部分操作的回滚操作。同理也避免了多次开启事务,导致前一个事务被提交的问题。

可能savepoint和rollback to语句并不能称之为事务嵌套,也不能说MySQL是支持还是不支持事务嵌套。总之通过savepoint和rollback to,是可以用来达到一些事务嵌套特性的。

© 著作权归作者所有

共有 人打赏支持
宇润

宇润

粉丝 58
博文 16
码字总数 9224
作品 16
无锡
技术主管
私信 提问
PHP中实现MySQL嵌套事务的两种解决方案

一、问题起源 在MySQL的官方文档中有明确的说明不支持嵌套事务: [sql] view plaincopy Transactions cannot be nested. This is a consequence of the implicit commit performed for any c......

开元中国2015
2015/04/23
57
0
老是被人问为什么不用mysql -- 两个凡是

并不是追求特立独行 随手写几个: 没有sequence, 时区时间, json, network, range,uuid..... 数据类型支持 不支持完整的事务, 比如多层次的事务嵌套 在任何情况的锁表 不支持函数index, 部...

宏哥
2016/01/19
1K
18
mysql支不支持正则表达式里的零宽断言?

mysql查询语句: select t.* from test t where t.phone_number REGEXP '([0-9])\1((?!\1)[0-9])\2; 出现这个错误: [SQL] select t.* from tb_repository_phone_number t where t.phone_num......

wy_chen
2013/03/07
1K
2
django数据库事务使用记录

django版本:1.8+, 数据库: mysql 事务:事务是一系列数据库语句的原子集。即使程序在运行时崩溃了,数据库可以确保事物集中的所有变更要么都被提交,要么都被放弃。 我们知道mysql数据库支...

子夜闻雪
2016/04/11
67
0
从TB级数据迁移,谈一谈自己的收获

项目背景 电商公司,核心服务重构,百亿级数据迁移,服务必须保证7*24小时不中断。 迁移方案 A、数据转换直接迁移到新库 B、按分库分表的shardId迁移 A方案在服务不中断的时候存在两个问题 ...

EveryDayNew
2016/10/17
63
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 舔狗是没有好下场的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @我没有抓狂 :#今天听什么# #今天听这个# 分享 Nirvana 的歌曲《Smells Like Teen Spi...》 《Smells Like Teen Spi...》- Nirvana 手机党少...

小小编辑
今天
16
4
Linux Wireshark普通用户启动使用方案

当系统安装好Wireshark后请正常启动是否可以进行正常使用,如果不行请参考下列指导 向系统添加一个用户组 sudo groupadd wireshark //如提示此组存在可跳过 将指定用户添加到这个组中 sudo...

CHONGCHEN
今天
2
0
CSS 选择器参考手册

CSS 选择器参考手册 选择器 描述 [attribute] 用于选取带有指定属性的元素。 [attribute=value] 用于选取带有指定属性和值的元素。 [attribute~=value] 用于选取属性值中包含指定词汇的元素。...

Jack088
今天
2
0
数据库篇一

数据库篇 第1章 数据库介绍 1.1 数据库概述  什么是数据库(DB:DataBase) 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据...

stars永恒
今天
5
0
Intellij IDEA中设置了jsp页面,但是在访问页面时却提示404

在Intellij IDEA中设置了spring boot的jsp页面,但是在访问时,却出现404,Not Found,经过查找资料后解决,步骤如下: 在Run/Debug Configurations面板中设置该程序的Working Directory选项...

uknow8692
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部