Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 一行何时实际插入数据库?_Sql_Database - Fatal编程技术网

Sql 一行何时实际插入数据库?

Sql 一行何时实际插入数据库?,sql,database,Sql,Database,行何时实际插入数据库?是在“INSERT”语句完成时吗?或者当“插入”语句之后的“提交”语句完成时?如果您在事务内部运行,则当事务提交时。否则,立即执行。取决于数据库/表的实现。它可能只是在事务日志被集成的时候,直到这时该行才被插入到事务日志和内存中。比您想象的要晚。这里的原则一般适用 事务日志的整个要点是确保在插入完成时发生电源故障时工作正常。插入将作为恢复阶段的一部分向前或向后滚动(在大多数RDBMS中) 因此,更重要的是确认事务日志条目存储在介质上。然后插入可以提交 包含更改行的数据页最终

行何时实际插入数据库?是在“INSERT”语句完成时吗?或者当“插入”语句之后的“提交”语句完成时?

如果您在事务内部运行,则当事务提交时。否则,立即执行。

取决于数据库/表的实现。它可能只是在事务日志被集成的时候,直到这时该行才被插入到事务日志和内存中。

比您想象的要晚。这里的原则一般适用

事务日志的整个要点是确保在插入完成时发生电源故障时工作正常。插入将作为恢复阶段的一部分向前或向后滚动(在大多数RDBMS中)

因此,更重要的是确认事务日志条目存储在介质上。然后插入可以提交

包含更改行的数据页最终将在磁盘上结束(检查点等),但不一定在成功提交时结束

但是,数据页在内存中,可以使用

请注意,插入可能会导致页面拆分、索引更新、触发器触发等,所以我所说的是简单的

当数据最终存储在磁盘上时,无论采用哪种方式都无所谓:只要我能够获取数据,并且在断电的情况下都是安全的

一个老版本,但仍然与SQL Server相关:


我总结的是

据我所知,一行被放入一个临时表中,直到它被验证,而不是等待任何其他函数/触发器等的产品。一旦调用COMMIT,它实际上被写入表中。同意,尽管取决于隔离级别,但在事务提交之前数据可以是可见的-ok。我在这里使用的是IBMDB2。有没有办法真正找到答案?这里有一个链接可以找到答案: