当前位置:  开发笔记 > 后端 > 正文

Rails交易

如何解决《Rails交易》经验,为你挑选了1个好方法。

我正在尝试使用ActiveRecord::Base.transaction.我认为使用Rails 1.2.6和mysql 5.0默认情况下回滚不起作用.更多地玩它我发现autocommit在mysql连接中没有设置为0.

问题:

1)如何禁用所有连接的rails中的自动提交?

2)它是否会对其他不必交易的代码产生负面影响?



1> Bill Karwin..:

如果您有需要显式事务的代码和可以依赖自动提交的代码,则可能不应禁用所有连接的自动提交.你是在正确的轨道,想知道这是否会影响其他代码.如果您禁用自动提交,但其他代码不知道它必须承诺提交其工作,那么这将是一个问题.连接关闭时回滚未提交的工作.

您应该知道MySQL的默认存储引擎是MyISAM,它根本不支持事务.当您对使用MyISAM的表进行更改时,无论您开始和完成事务的显式请求,以及无论自动提交的状态如何,都会立即有效地提交更改.因此,除非您使用InnoDB存储引擎(或其他事务安全存储引擎,如BDB)创建表,否则无论如何都无法回滚.

这是不必要的禁用自动提交模式,MySQL使用的交易.只需明确地开始交易.在您提交或回滚该事务之前,以下SQL语句将成为事务的一部分,无论当前连接上的autocommit值如何.

http://dev.mysql.com/doc/refman/5.0/en/commit.html说:

使用START TRANSACTION时,自动提交将保持禁用状态,直到您使用COMMIT或ROLLBACK结束事务.然后,自动提交模式将恢复为先前的状态.

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有