mysql - 快速连续执行语句时出现Ruby mysql2错误

标签 mysql sql ruby

我在使用 Ruby 中的 Mysql2 客户端时遇到一个奇怪的问题。尝试执行以下操作时:

client.query("CREATE DATABASE ...; INSERT INTO ..."); #SQL truncated for brevity
client.query("SELECT 1 FROM ...") #SQL truncated for brevity

Ruby 抛出一个错误,指出我从中选择的表不存在。但是,如果我尝试以下操作:

client.query("CREATE DATABASE ...; INSERT INTO ..."); #SQL truncated for brevity
sleep 1
client.query("SELECT 1 FROM ...") #SQL truncated for brevity

查询没有问题。似乎我需要给 MySQL 服务器一些时间来加载数据,然后才能查询它。谁能解释为什么会这样,以及如何在不使用 sleep 的情况下以编程方式克服这个问题?

更新

我这样初始化客户端:

Mysql2::Client.new({
                       :adapter => "mysql2",
                       :host => ip_address,
                       :username => db_username,
                       :password => db_password,
                       :flags => Mysql2::Client::MULTI_STATEMENTS
                   })

我检查了“query_options”属性并将异步设置为 false。我已尝试将 async => false 标志显式设置为无济于事。

如果我使用

也会发生同样的问题
Model.connection.execute(SQL HERE)

请注意,这都是在 Rails 单元测试中执行的。

谢谢

最佳答案

出于某种原因,唯一可以正常工作并且不需要中间的 sleep 1 的是以下内容:

@model = Model.new    
Mysql2::Client.default_query_options[:connect_flags] |= Mysql2::Client::MULTI_STATEMENTS
@model.connection.reconnect!

关于mysql - 快速连续执行语句时出现Ruby mysql2错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14914314/

相关文章:

ruby - 如何使用具有 native 扩展的 Nix 构建 Ruby Gem

ruby - Chef Recipe 如何检查文件是否存在

ruby - Require 返回一个数组而不是一个 bool 值

MySQL GROUP_CONCAT 重新排列值

Mysql版本5.6 jar版本5.1

mysql - 管理和链接分层数据

php - 如何将多行数据转换为数组并从另一个数组中减去它?

sql - mysql 中的排名

带有 git 和 phpfog 的 Php 多数据库环境

mysql - 从数据库中获取项目列表