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

use*_*752 10 ruby mysql sql

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

client.query("CREATE DATABASE ...; INSERT INTO ..."); #SQL truncated for brevity
client.query("SELECT 1 FROM ...") #SQL truncated for brevity
Run Code Online (Sandbox Code Playgroud)

Ruby抛出一个错误,我正在选择的表不存在.但是,如果我尝试以下内容:

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

查询没有问题.在我能够查询之前,似乎需要给MySQL服务器一些时间来加载数据.任何人都可以解释为什么会这样,以及如何在不使用睡眠的情况下以编程方式克服

更新

我初始化客户端如下:

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

我检查了'query_options'属性,async设置为false.我已经尝试显式设置async => false标志无效.

如果我使用,会发生同样的问题

Model.connection.execute(SQL HERE)
Run Code Online (Sandbox Code Playgroud)

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

谢谢

use*_*752 0

由于某种原因,唯一最终起作用并且不需要sleep 1中间的事情是:

@model = Model.new    
Mysql2::Client.default_query_options[:connect_flags] |= Mysql2::Client::MULTI_STATEMENTS
@model.connection.reconnect!
Run Code Online (Sandbox Code Playgroud)