MySQL事务实现

时间:2017-10-29 19:36:10

标签: mysql stored-procedures transactions

我正在使用InnoDB 5.6.35,我对实现MySQL事务的正确方法有疑问。如果我实现以下内容,请将其发送给MySQL:

START TRANSACTION;

SQL-Statement 1; SQL语句2; ... COMMIT;

问题:如果其中一个SQL语句失败,MySQL会自动发出回滚吗?我看到的行为是,当遇到失败的操作时,看起来MySQL没有提交上述语句(甚至在我的程序中没有调用Rollback),但在阅读一些帖子后我不太确定。我是否必须按照其他人的建议将代码包装在存储过程中,并在我的代码中明确调用“Rollback”?

有人可以帮我澄清一下吗?

1 个答案:

答案 0 :(得分:0)

https://dev.mysql.com/doc/refman/5.5/en/innodb-error-handling.html 在某些情况下,它只会回滚失败的语句。

  
      
  • 如果表空间中的文件空间不足,则MySQL表已满   发生错误,InnoDB回滚SQL语句。
  •   
  • 事务死锁导致InnoDB回滚整个事务。
  •   
  • 重复键错误回滚SQL语句
  •   
  • 行太长错误会回滚SQL语句。
  •   
  • 其他错误主要是由MySQL代码层(在InnoDB存储引擎级别之上)检测到的   回滚相应的SQL语句
  •