mysql - innodb 超时回滚

标签 mysql database transactions locking timeout

我有一个运行存储过程的 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 handlerFOR '1205'” 在您的程序中,您可以(例如)回滚事务并中断进程。

关于mysql - innodb 超时回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16716616/

相关文章:

Mysql查询使用两个条件对数据进行分组

mysql - 如何配置postfix、dovecot邮件服务器在MySQL中保存日志

php - 如何使用 php 从 MySql 按姓名排序?

java - Android 数据库 EditText NumberSigned

mysql - 如果变量中不存在则删除行

c# - 访问/管理多组织的数据库设计

java - JDBC驱动程序不支持XA问题

CD/DVD 上带有 MySQL 数据的 PHP 项目

java - @Transactional(readOnly=true) 与@QueryHints

c# - NUnit TestFixure 和 SetUp 的嵌套 TransactionScope