我正在使用InnoDB 5.6.35,我对实现MySQL事务的正确方法有疑问。如果我实现以下内容,请将其发送给MySQL:
START TRANSACTION;
SQL-Statement 1; SQL语句2; ... COMMIT;
问题:如果其中一个SQL语句失败,MySQL会自动发出回滚吗?我看到的行为是,当遇到失败的操作时,看起来MySQL没有提交上述语句(甚至在我的程序中没有调用Rollback),但在阅读一些帖子后我不太确定。我是否必须按照其他人的建议将代码包装在存储过程中,并在我的代码中明确调用“Rollback”?
有人可以帮我澄清一下吗?
答案 0 :(得分:0)
https://dev.mysql.com/doc/refman/5.5/en/innodb-error-handling.html 在某些情况下,它只会回滚失败的语句。
- 如果表空间中的文件空间不足,则MySQL表已满 发生错误,InnoDB回滚SQL语句。
- 事务死锁导致InnoDB回滚整个事务。
- 重复键错误回滚SQL语句
- 行太长错误会回滚SQL语句。
- 其他错误主要是由MySQL代码层(在InnoDB存储引擎级别之上)检测到的 回滚相应的SQL语句