Rails MySQL多语句SQL执行失败

时间:2016-07-13 21:45:18

标签: mysql ruby-on-rails

基于尝试在MySQL https://stackoverflow.com/a/2292030/48659中模拟事务安全序列 并执行SQL语句How do you manually execute SQL commands in Ruby On Rails using NuoDB

我正在尝试执行以下操作:

ActiveRecord::Base.connection.execute("UPDATE sequence SET seq_current = (@next := seq_current + 1) WHERE seq_name = 'foo'; SELECT @next;")

但现在我发现Mysql2驱动程序无法处理多个语句!

我可以使用一个好的解决方案吗?如果我把这两个陈述分开:

ActiveRecord::Base.connection.execute("UPDATE sequence SET seq_current = (@next := seq_current + 1) WHERE seq_name = 'foo';")
ActiveRecord::Base.connection.execute("SELECT @next;")

它可以在一个控制台中运行,但是我可以确定这是非常安全的,在这两个语句的中间没有其他任何东西可以潜入并执行吗?

有更好的解决方案吗? (我不介意使用PostgreSQL,如果可行的话;还没试过。)

1 个答案:

答案 0 :(得分:0)

我不是百分之百,这可以工作 - 交易可以帮助你吗?

ActiveRecord::Base.transaction do
  ActiveRecord::Base.connection.execute("UPDATE sequence SET seq_current = (@next := seq_current + 1) WHERE seq_name = 'foo';")
  ActiveRecord::Base.connection.execute("SELECT @next;")
end