2

所以理论上我们在使用事务时可以在数据库中插入部分信息。例如插入发生,突然我们失去了电力。是否会出现一条记录将写入 tableA 而不会写入 tableB 的情况?

4

2 回答 2

3

在开始交易手册中自我解释:

如果遇到错误,在 BEGIN TRANSACTION 之后所做的所有数据修改都可以回滚以将数据返回到这个已知的一致性状态。

答案是否定的:不可能。对于您的场景,TableA 和 TableB 插入都在同一个事务中,由于 ACID 行为,如果插入之间发生“断电”,当数据库上升时,TableA 插入会回滚。记住原子的A。

于 2012-10-24T06:39:35.243 回答
0

它不会发生,因为所有活动都是先写入事务日志,而不是写入实际的数据文件,并且在断电的情况下,当 sql server 启动时,它会遍历事务日志并回滚任何未完成的事务(你会注意到它启动的速度有多慢或数据库将处于恢复模式一段时间)。

数据文件在一段时间后被写入者写入,然后该内存作为脏页在内存中可用。

于 2012-10-24T11:18:58.460 回答