gpt4 book ai didi

mysql - rails 交易

转载 作者:行者123 更新时间:2023-11-29 04:04:43 29 4
gpt4 key购买 nike

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

问题:

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

2) 它是否会对其他不必是事务性的代码产生一些负面影响?

最佳答案

如果您混合使用需要显式事务的代码和可以依赖自动提交的代码,也许您不应该为所有连接禁用自动提交。您想知道这是否会影响其他代码,这是正确的。如果您禁用自动提交,但其他代码不知道它必须提交才能提交其工作,那么这将是一个问题。连接关闭时回滚未提交的工作。

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

unnecessary禁用自动提交模式以在 MySQL 中使用事务。只需显式地开始一个事务。以下 SQL 语句将成为事务的一部分,直到您提交或回滚该事务,无论当前连接上的自动提交值如何。

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

With START TRANSACTION, autocommit remains disabled until you end the transaction with COMMIT or ROLLBACK. The autocommit mode then reverts to its previous state.

关于mysql - rails 交易,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/344247/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com