我正在使用 Ruby 和 Datamapper 将大量记录加载到 MySQL 数据库中。这些记录主要是插入的,但也有相当数量的更新。我基本上想“更新”数据库中这些记录的所有列。我能找到的唯一选项是:
1) 查询一条记录。如果存在,请更新它。如果没有,创建一个记录。 (总是一个额外的查询) 2) 尝试创建一个新记录。捕获重复键错误。查询现有记录。更新那些记录。 (有更新时,额外查询2次)
我想利用 MySQL 的 On Duplicate Key Update
,因为它看起来效率更高。有没有办法在 Datamapper 中执行此操作?还有其他建议吗?
最佳答案
您应该能够为此使用first_or_create
。来自docs :
zoo = Zoo.first_or_create(:name => 'The Glue Factory')
我没有通过在 do/do_mysql
中查找 On Duplicate Key Update
得到任何匹配项 |或 dm-mysql-adapter
来源,所以它可能不支持它。如果效率对于需要此功能来说非常重要,您可能需要求助于纯 SQL。
关于mysql - Datamapper 是否支持 'On Duplicate Key Update' 或其他更新插入技术?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12099356/