数据库
首页 > 数据库> > ActiveRecord,MySQL和嵌套事务 – 行为是什么?

ActiveRecord,MySQL和嵌套事务 – 行为是什么?

作者:互联网

Rails使用savepoints来实现与MySQL的嵌套事务,据我所知,在原子数据变化方面,它的语义与实际的嵌套事务相同.

>这是真的吗?
>如何在代码中的任意时间调用“save”?交易仍然保持开放,直到阻止结束,对吗?使用嵌套事务/保存点时,行为是否有任何差异?
>还有什么要注意的吗?
> [故意煽动火焰战]我应该切换到PostgresSQL吗?

解决方法:

>是的,这是真的,唯一具有真正嵌套事务的数据库是MS SQL Server
>是的,即使您在任意时间调用save,事务也会保持打开状态,但是,如果在嵌套事务中引发了回滚异常,那么它将不会导致外部事务的全局回滚(保存点管理也参见#3) .
>您可以将Model.transaction(:requires_new => true)传递给创建子事务,这可能是您期望的行为,否则您将无法控制嵌套事务,因为它不会遵循嵌套回滚.此外,人们有时会忘记模型回调都是在1个事务中执行的,因此回调内的任何事务都是嵌套事务.
>你并没有真正煽动火焰战,PostgresSQL也没有嵌套交易(它也使用保存点),它们都是很棒的数据库.

标签:mysql,ruby-on-rails,transactions,activerecord,savepoints
来源: https://codeday.me/bug/20190621/1255983.html