mysql.connecter.errors.DatabaseError:1205锁定等待超时



我正在尝试解决有关SQL数据库的超时问题。错误发生在:中

SQLUpdate="UPDATE scoutinfo SET patrolID=1 WHERE patrolID=%s"

当我收到这个错误时,执行这个命令似乎花费了太长时间。

mysql.connector.errors.DatabaseError: 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

是他们的一些设置,我需要在MySQL上更改,以允许python更新/删除数据库中的行。数据库相对较小(每个表中的行数<25(

SQLPatrolID="SELECT patrolID FROM patrols WHERE patrolname=%s"
mycursor.execute(SQLPatrolID,(DPatrol.get(), ))
myresult=mycursor.fetchall()
PatrolID=myresult[0][0]
print(PatrolID)
SQLUpdate="UPDATE scoutinfo SET patrolID=1 WHERE patrolID=%s"
mycursor.execute(SQLUpdate,(PatrolID, ))
mydb.commit()
print("Success!")
SQLDeletePatrol="DELETE patrolinfo WHERE patrolID=%s"
mycursor.execute(SQLDeletePatrol,(PatrolID, ))
mydb.commit()

你需要的任何额外信息我都可以乐意提供。

否。您的查询执行时间不会太长。获取要更新的元组的锁花费了太长时间。

这是什么意思?还有另一个查询/事务,同时更新完全相同的记录。它可能就在你的代码上,或者可能是一个不同的线程/应用程序。不过我认为这是第一种情况。

你可以通过检查以下表格来查看谁在拿锁:

  1. INNODB_LOCK_WAITS
  2. INNODB_LOCKS

或者,运行以下命令:

> show engine innodb status;

如果您使用INNODB引擎,这将起作用。你可能是。

最新更新