面试遇到一个问题

问:一个请求内,执行了四个独立的事务,如何保证当事务一个事务失败数据一致(完整)性?
协程或不协程都行

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 12

我理解的就是同时开启四个链接,然后分别开启手动事物,然后运行相关逻辑,当有一个事务执行失败,然后就手动将四个事务 rollback。如果没有失败,那就是直接四个全部 commit。

我查询了,MySQL 支持使用这种方式,进行事务嵌套

1周前 评论
xiusin (楼主) 1周前
gurd 1周前
mowangjuanzi (作者) 1周前
gurd 1周前
mowangjuanzi (作者) 1周前

最简单的方法: 4个独立实物逻辑,用4套try catch包住,执行完都先别commit。 等4个事务都执行完,都没有异常的话。 统一写4个commit,或者4个callback。 这种方法的弊端: 如果串行,后面的会等待前面的。 如果4个并行执行,3个快事务会一直等待最慢的一个事务。 效率不佳

最复杂的方法: 4个独立事务,每一个都写一套对应的数据回滚逻辑。 执行完毕一个commit一个。 如果前三个事务全部成功commit了,执行到第四个commit报错了,需要调用自己写的数据回滚逻辑,把前三个事务回滚。 这种方法的思路与分布式事务的实现类似,会增加程序的复杂度。

1周前 评论
xiusin (楼主) 1周前
gurd (作者) 1周前

这种要分事务的逻辑有没有关联,再根据关系选怎么回滚事务吧

1周前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!