innodb-自动提交、提交、回滚

自动提交、提交、回滚

1.如果启用了自动提交的会话可以通过使用显式START TRANSACTION或BEGIN语句启动并使用COMMIT或ROLLBACK语句结束来执行多语句事务。

A session that has autocommit enabled can perform a multiple-statement transaction by starting it with an explicit START TRANSACTION or BEGIN statement and ending it with a COMMIT or ROLLBACK statement.

2.如果在会话中设置SET autocommit = 0,则自动打开一个事务,执行commit或rollback结束事务再次打开一个新事务

If autocommit mode is disabled within a session with SET autocommit = 0, the session always has a transaction open. A COMMIT or ROLLBACK statement ends the current transaction and a new one starts.
注意:测试中发现,实际情况是,执行sql时会则自动打开一个事务,执行commit或rollback结束事务,再执行sql时会再次打开一个新事务,如果不执行sql,是没有新事务打开的,不知道是否是我理解可能错了.

3.如果一个session关闭了自动提交,在没有提交的情况下异常退出,mysql会回滚该事务。

If a session that has autocommit disabled ends without explicitly committing the final transaction, MySQL rolls back that transaction.
注意:测试中发现,相反,如果开启了自动提交,在没有提交的情况下异常退出,mysql会提交该事务。

4.提交和回滚都会释放innodb锁(注意这里没有提到表锁,表锁释放必须通过unlock tables)

Both COMMIT and ROLLBACK release all InnoDB locks that were set during the current transaction.

5.如果要在一个事务中执行多个sql,可以SET autocommit = 0,最后根据需要使用commit或rollback来结束事务。

To use multiple-statement transactions, switch autocommit off with the SQL statement SET autocommit = 0 and end each transaction with COMMIT or ROLLBACK as appropriate.

### 关于在 MySQL回滚提交的事务 一旦事务被成功提交到数据库,在标准 SQL 和大多数关系型数据库管理系统(RDBMS),包括 MySQL 中,这些更改就成为永久性的,并且无法直接撤销。这是因为当 `COMMIT` 命令被执行时,所有的变更都会写入磁盘并释放锁资源。 对于已经提交的事务,理论上不存在直接的方式将其回滚。然而,有几种间接方法可以处理这种情况: - **逻辑层面的数据恢复**:如果应用程序设计中有版本控制机制或者影子表来保存历史数据,则可以通过应用层面对特定记录执行反向操作来实现所谓的“软删除”或“时间旅行查询”。 - **物理备份还原**:利用定期制作的全量/增量备份文件以及二进制日志(binlog),可以在必要时候将整个实例恢复至某个指定的时间点之前的状态。这通常涉及到停止服务、卸载现有库结构再重新加载旧版副本的过程[^3]。 需要注意的是,上述两种方式都不是严格意义上的“回滚”,而是针对不同场景下的补救措施。另外一种情况是在开发测试环境中,有时会采用一些特殊手段如设置临时变量标记未真正提交前的状态以便快速重置环境;但这显然不适合生产环境下使用。 ```sql -- 这里提供一个基于binlog的日志解析工具mysqlbinlog用于查看和导出具体SQL语句的例子 shell> mysqlbinlog binlog_file_name | grep "BEGIN" -A 10 ``` 为了防止意外提交导致不可逆的影响,在实际工作中建议遵循良好的实践原则,例如启用自动提交模式(`autocommit=ON`)下谨慎操作重要业务流程中的显式事务管理;同时合理配置undo log保留期限以支持闪回特性(InnoDB存储引擎特有)[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值