如何使用 ruby mysql2 执行事务
我已经开始使用 mysql2
gem。我试图弄清楚一些基本的事情 - 其中之一是如何显式执行事务(对于批处理操作,例如多个 INSERT/UPDATE 查询)。
在旧的 ruby-mysql 中,这是我的方法:
client = Mysql.real_connect(...)
inserts = [
"INSERT INTO ...",
"UPDATE .. WHERE id=..",
# etc
]
client.autocommit(false)
inserts.each do |ins|
begin
client.query(ins)
rescue
# handle errors or abort entirely
end
end
client.commit
我在文档中找不到太多内容 - 如何使用 mysql2 完成同样的操作?
I've started using mysql2
gem. I'm trying to figure out a few basic things - one of them is how to explicitly perform transactions (for batch operations, like multiple INSERT/UPDATE queries).
In the old ruby-mysql
, this was my approach:
client = Mysql.real_connect(...)
inserts = [
"INSERT INTO ...",
"UPDATE .. WHERE id=..",
# etc
]
client.autocommit(false)
inserts.each do |ins|
begin
client.query(ins)
rescue
# handle errors or abort entirely
end
end
client.commit
I couldn't find much in the docs - how can the same be done with mysql2
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我刚刚完成了一个实现:
所以你可以这样使用:
I just have done a implementation:
So you could use like this:
这个问题让我很好奇,所以我追踪了 Ruby on Rails 是如何处理事务的,我发现这段代码:
你有吗尝试执行
begin
和commit
语句围绕着其他语句?This question made me curious, so I tracked down how Ruby on Rails handles transactions, and I found this code:
Have you tried executing a
begin
andcommit
statement around your other statements?使用 Bruno 的模板,然后添加事务状态指示器:
与#transaction 交互:
Using Bruno's template, then adding a transaction status indicator:
Interacting with #transaction:
我刚刚使用
klass.transaction 做
....
结尾
其中 Klass 是我插入的 ActiveRecord 类
I just used
klass.transaction do
....
end
where Klass is the ActiveRecord class that Im inserting to