mysql—每个sql都是在从未达到提交点时撤消的吗?

hmae6n7t  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(197)

我想我的原则是对的,我只是想确保我的原则是对的。
因此,当autocommit被启用时,意味着我执行的每个命令都不会被直接执行,除非谁触发了提交。例如,当我有一个基本宏,运行方式如下:

statement.executeUpdate("SET autocommit = 0;")

//some code
//SQL Queries
//SQL DELETEs
//SQL INSERTs

statement.executeUpdate("COMMIT;")

然后会发生的事情是-如果脚本毫无问题地运行,那么脚本会执行到每个sql语句并在最后提交,如果没有,并且发生了错误或异常,则脚本在该点处中断永远不会转到将要进行提交的点,并且在该点之前的每个更改都是“撤消”,因此每个删除的信息仍然存在,并且每个插入都会被丢弃。
是这么简单还是我做错了什么?

jv4diomz

jv4diomz1#

假设您使用的是一个像样的数据库,那么当前事务的数据通常不存储在表堆本身中,而是存储在“重做日志”中。
也就是说,在执行提交之前,它甚至不在表中。提交和其他稍后处理的操作会在某个时候将它们放在主表中。
一般来说,如果数据库引擎崩溃,数据可能仍然在磁盘上的某个地方,但不在任何“正式”表区域中,因此当数据库引擎重新启动时,它将被丢弃。它没有修改实际数据。

相关问题