我有一个运行存储过程的 mysql 5.1 数据库
START TRANSACTION
Insert some rows to table 1
Insert some rows to table 2
COMMIT
调用这个存储过程经常失败
SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try restarting transaction
根据 this page here ,如果 mysql 服务器不是以 innodb_rollback_on_timeout
启动的,那么只有最后一条语句被回滚,但是 START TRANSACTION
本身将设置 autocommit = 0
。这是否意味着我们的 mysql 服务器需要使用此参数启动,以便它不会使数据库处于不一致状态,即某些行插入到表 1 而不是插入到表 2 中?
最佳答案
是的,或者declare a handler “FOR '1205'
” 在您的程序中,您可以(例如)回滚事务并中断进程。
关于mysql - innodb 超时回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16716616/