最近开发中遇到了使用MySQL,多次开启事务,出现了数据错乱问题,伪%ign%ignore_a_1%re_a_1%码如下:
begin;# 操作1begin;# 操作2rollback;
执行完后出现了操作1的数据真正写入,只有操作2的数据回滚了。在第一个事务没有提交或回滚时,再开启第二个事务时,会自动提交第一个事务。
这明显不符合心理预期,而且也无法回滚一部分操作。那么问题来了,MySQL 支不支持事务嵌套呢?
这个问题很难准确回答支持还是不支持!
首先,调用多次begin的写法,在MySQL里肯定是无法首先事务嵌套的。经过群内一位朋友的提醒,了解到MySQL中有一个叫savepoint和rollback to的语句。
乐活途购物分享社区
beta v1.1版本为第一个版本,简单的整合了基础功能,各位站长拿到程序后,不要纠结后台的功能简单,后续将不断更新扩展。在beta v1.1版本使用过程中遇到什么问题,请登录 www.loftto.com 进行反馈! 安装说明######重要提醒:程序不支持二级目录安装,请使用一级目录或二级目录绑定!#第一步,确定你的服务器支持PHP+mysql。#第二步,确定你的服务器开启了gd库。#第三步,
0 查看详情
示例代码:
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到底支不支持事务嵌套?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1079434.html
微信扫一扫
支付宝扫一扫