mysql - 当记录通常已经存在时如何有效地使用 first_or_initialize

标签 mysql sql ruby-on-rails activerecord

我正在尝试弄清楚如何使用 ActiveRecord 来执行以下伪代码:

rows_updated = UPDATE my_table SET my_column="abc" WHERE id=123
if rows_updated == 0 then INSERT INTO my_table (id, my_column) VALUES (123, "abc")

这是因为大部分时间记录已经存在。我想为自己节省 first_or_create! 似乎生成的额外 SELECT 查询。

有什么想法吗?

最佳答案

对于这种情况,还有不同且更优雅的解决方案(从我的角度来看) 其中一个选项是使用替换命令而不是所有这些代码。

只需运行:

REPLACE INTO my_table (id, my_column) VALUES (123, "abc")

这个解决方案在大多数情况下工作得很好,但是如果你对这段代码有很高的负载,你应该考虑使用 INSERT .... ON DUPLICATE KEY UPDATE

关于mysql - 当记录通常已经存在时如何有效地使用 first_or_initialize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19341867/

相关文章:

mysql - 在单个资源中连接到多个 mysql 数据库

php - 拉拉维尔 4 : "Replace" Eloquent instead of "Select"

php - MySQL:获取推荐人花费最多的前 3 个推荐人

MySQL - 索引在登台服务器上工作,但在生产服务器上不起作用

mysql - 如何从rails中的记录数组中找出表名?

javascript - 如何让 Action 响应 PHP 中的 javascript?

mysql - 查询我在 MySQL 中的表数

php - 当没有任何用户名时,如何将未知设置为列的值?

sql select min,从同一行的不同列返回值并进行分组

ruby-on-rails - 如何将 user.id 从一个 Controller 传递到另一个 "undefined method ` id' for nil :NilClass"