基于尝试在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,如果可行的话;还没试过。)
答案 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