首页 > 数据库技术 > 详细

mysql事务可以一次回滚多个库里的多张表么

时间:2019-12-11 21:47:13      阅读:185      评论:0      收藏:0      [点我收藏+]

这次不按照以前的风格写了

 

大背景就是,我写了一段大逻辑,会依次往产品库的产品表里添加数据记录,往订单库的待付费订单表添加待付费记录,往协议库的协议表添加协议签署记录

然后每一步都可能失败,我期望只要有其中一个失败,就把所有的都回滚掉。


 

尴尬的是,我在php的Zend代码逻辑里,只回滚了一张表,这就尴尬了,难道mysql的事务只能在同一个数据库中操作么?

 

其实不然,特意在mysql的客户端中尝试了下:

先查询,在两个库中的两张表中如下两条记录,

技术分享图片

  

然后我开启了事务:

技术分享图片

 

 之后执行了对上面两条记录的删除操作,之后就行回滚

技术分享图片

 

再次查询,发现上面的两条记录都回来了,也就是说,mysql事务的回滚是支持跨库跨表的。

 


 

那我的代码里写的事务咋就不行了呢?

 

原来是以为代码进行db连接是通过pdo实现的,然后在Zend里面对pdo进行了封装,每一个pdo对象是一个 host + port + database;

 

实际上,我们在客户端执行的时候,连接对象就是host + port ,而且pdo本身也支持host + port ,不知什么原因,zend里就偏偏封装的时候加了database, 这样只要涉及到跨库,就没法回滚了。

这样还引入了一个坏处,就是如果我们有大量的db操作,这些操作会访问同一个集群的不同的库,则会多出非常多的连接了,这也就是之前我们频繁报mysql连接数超了的原因了,

在没法修改底层Zend pdo连接建立的情况下,就只能多增加mysql 的 proxy,多一个host + port

mysql事务可以一次回滚多个库里的多张表么

原文:https://www.cnblogs.com/liuyong18/p/12025168.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!