文档章节

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

宇润
 宇润
发布于 10/17 13:12
字数 460
阅读 35
收藏 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,是可以用来达到一些事务嵌套特性的。

© 著作权归作者所有

共有 人打赏支持
宇润

宇润

粉丝 51
博文 8
码字总数 4761
作品 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 和 Postgresql 对比

Mysql 使用太广泛了,以至于我不得不将一些应用从mysql 迁移到postgresql, 很多开源软件都是以Mysql 作为数据库标准,并且以Mysql 作为抽象基础的,但是具体使用过程中,发现Mysql 有很多问题...

宏哥
2010/12/14
32.8K
63
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_numbe......

wy_chen
2013/03/07
1K
2
从TB级数据迁移,谈一谈自己的收获

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

EveryDayNew
2016/10/17
63
0

没有更多内容

加载失败,请刷新页面

加载更多

用POLARDB构建客到智能餐饮系统实践

摘要: 在新零售成为大趋势的今天,餐饮行业也加入到这一浪潮之中。智能餐饮系统将帮助餐饮行业从多个维度提升自己的运营能力和收益,而打造智能餐饮系统SaaS化能力也成为了目前的一个热点。...

阿里云官方博客
31分钟前
1
0
aws S3 util demo

package com.example.demo;import com.amazonaws.AmazonClientException;import com.amazonaws.AmazonServiceException;import com.amazonaws.auth.BasicAWSCredentials;import co......

经常把天聊死的胖子
今天
5
0
linux下查看cpu、memo、io、swap性能数据脚本

直接贴脚本: 1、cpu #!/bin/bashCurrentDate=`date -d today '+%Y%m%d'`CurrentTime=`date -d today '+%Y%m%d%H%M'`mytext="$CurrentTime\t`top -b -n 1 | grep Cpu\(s\......

郑加威
今天
5
0
MySQL之——查询重复记录、删除重复记录方法大全

MySQL之——查询重复记录、删除重复记录方法大全

安小乐
今天
2
0
spring容器启动,停止,关闭事件监听-ApplicationEvent

ApplicationEvent ApplicationEvent相当于一个事件,所有自定义事件都需要继承这个抽象类。在Eclipse中Ctrl+Shift+H调用类的层次结构列表,可以看到如下 Application下抽象子类ApplicationCo...

tantexian
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部