首页 >数据库 >mysql教程 > 正文

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

转载2019-05-14 15:15:2801460
最近开发中遇到了使用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,是可以用来达到一些事务嵌套特性的。

以上就是MySQL到底支不支持事务嵌套?的详细内容,更多请关注php中文网其它相关文章!

php中文网最新课程二维码

声明:本文转载于:yurunsoft,如有侵犯,请联系admin@php.cn删除

  • 相关标签:MySQL
  • 相关文章

    相关视频


    网友评论

    文明上网理性发言,请遵守 新闻评论服务协议

    我要评论
  • 专题推荐

    推荐视频教程
  • MySQL数据管理之备份恢复案例解析视频教程MySQL数据管理之备份恢复案例解析视频教程
  • MySql参考手册MySql参考手册
  • PHP+Jquery+Mysql实现省市县三级联动PHP+Jquery+Mysql实现省市县三级联动
  • MySQL权威开发指南(教程)MySQL权威开发指南(教程)
  • MySQL高级进阶视频教程MySQL高级进阶视频教程
  • 视频教程分类