.NET 6 MySQL 新增数据报错: Lock wait timeout exceeded; try restarting transaction
这个错误是由于 MySQL 的事务锁等待超时引起的。它表示在等待锁定资源时超过了设置的超时时间。
解决这个问题的一种方法是尝试重新启动事务,以便再次尝试获取锁定资源。你可以在代码中使用'try-catch'块来捕获该错误,并在捕获到错误时重新启动事务。
以下是一个示例代码:
using (var connection = new MySqlConnection(connectionString))
{
await connection.OpenAsync();
using (var transaction = await connection.BeginTransactionAsync())
{
try
{
// 执行插入数据的逻辑
// ...
await transaction.CommitAsync();
}
catch (MySqlException ex) when (ex.Number == 1205) // 错误码 1205 表示锁等待超时
{
// 锁等待超时,重新启动事务
await transaction.RollbackAsync();
await transaction.DisposeAsync();
await connection.CloseAsync();
// 重新创建连接和事务对象
using (var newConnection = new MySqlConnection(connectionString))
{
await newConnection.OpenAsync();
using (var newTransaction = await newConnection.BeginTransactionAsync())
{
// 重新执行插入数据的逻辑
// ...
await newTransaction.CommitAsync();
}
}
}
}
}
请注意,这只是一种解决方法,具体的实现方式可能因你的代码结构和需求而有所不同。你可以根据自己的情况来调整代码。另外,你还可以尝试调整 MySQL 的配置参数来增加锁等待的超时时间。
原文地址: https://www.cveoy.top/t/topic/qfkP 著作权归作者所有。请勿转载和采集!