在开发过程中操作 DB 事务时发现有时候会回滚失败。
只有当所有操作都在同一个连接中进行时,才是可回滚的。
公司的前辈们针对不同的库操作自行维护了一个连接池(Yii中也有类似的逻辑),出现事务不起作用的时候,有可能是操作不是同一个连接导致的(特别是 Yii 这种通常使用 model 等 ORM 操作的的框架,很容易忽略这个问题)。
Summary
对 DB 连接以及框架内部实现不透彻的时候很容易踩坑。
有时候写写sql也挺好,现在操作跨库事务的时候一般都写一个获取连接的工厂方法(负责保证唯一连接、心跳检测等)。
直接通过sql跨库操作时一定要注意权限!
直接通过sql跨库操作时一定要注意权限!
直接通过sql跨库操作时一定要注意权限!
(很重要所以说三次,踩坑老司机= =)
PS: 除了权限,不同库是否在同一个实例 也是一个需要注意的点 。