为啥相同的 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 服务器上的解释和执行如此不同?