为啥相同的 MySql 查询在代码和工作台中表现不同?

Posted

技术标签:

【中文标题】为啥相同的 MySql 查询在代码和工作台中表现不同?【英文标题】:Why does the same MySql query behaves differently in code and workbench?为什么相同的 MySql 查询在代码和工作台中表现不同? 【发布时间】:2019-09-03 05:24:47 【问题描述】:

这是从我的应用程序运行的简单 mysql 查询:

    try
    
         using (var connection = new MySqlConnection(connectionString))
         
             var storedProcedure = "ReserveConstructB";
             using (var command = new MySqlCommand(storedProcedure, connection))
             
                    command.CommandType = CommandType.StoredProcedure;
                    connection.Open();
                    command.ExecuteNonQuery();
             
         
    

这是一个简单的存储过程:

BEGIN
    start transaction;
    select *from Kimmel_constructs for update;
END

如您所见,我没有在程序结束时提交,但无论如何,当我下次运行此程序时,即使“Kimmel_constructs”没有释放,我也会得到 lock_wait_timeout 异常。如果我从不同的连接调用 MySql Workbench 中的相同过程,我会得到异常,这将是所需的行为。这种行为的原因可能是什么?

【问题讨论】:

您的connection 在处理结束事务时关闭,从而释放锁。 @sticky bit,是的,这似乎很合理,但我认为情况并非如此,因为即使程序完成并且连接关闭,我仍然无法从工作台调用此程序-I只能从我的应用程序中调用它。 【参考方案1】:

因为您的应用程序可能会使 mysql 忙。因此,当您的进度完成时,您需要关闭连接,例如 connection.Close(),我建议使用:

if (con.State==ConnectionState.Open)

  con.Close();

  con.Open();

【讨论】:

以上是关于为啥相同的 MySql 查询在代码和工作台中表现不同?的主要内容,如果未能解决你的问题,请参考以下文章

为啥相同的查询在从 MySQL 服务器上的解释和执行如此不同?

为啥 Rust RwLock 在 fork 中表现异常?

为啥 MySQL 中的这个查询不使用索引?

为啥我的 SQL 查询在 MySQL 工作台中失败?

使用 OleDB 列出所有存储过程和查询时出现不明确的外部连接错误

为啥 SQL 查询中输入的日期值不等于 excel 工作表中的相同日期值?