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


本文摘自PHP中文网,作者藏色散人,侵删。

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

1

2

3

4

5

begin;

# 操作1

begin;

# 操作2

rollback;

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

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

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

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

示例代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

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,是可以用来达到一些事务嵌套特性的。

以上就是MySQL到底支不支持事务嵌套?的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

mysql存储过程是什么意思?

mysql如何在win10中配置环境变量

mysql存入数据时中文乱码怎么办

mysql的3种分表方案

mysql5.6主从复制(mysql数据同步配置)

mysql可视化管理工具phpmyadmin的学习

mysql中关于exists和not exists的示例分享

如何使用mysql workbench?

mysql高级学习之索引的优劣势及规则使用

mac安装mysql图形化工具?

更多相关阅读请进入《mysql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...

    暂无评论...