所以从理论上讲,当我们使用事务时,可以在数据库中部分插入信息。例如,插入物发生,突然我们失去电力。是否会出现将一条记录写入tableA并且不会写入tableB的情况?
答案 0 :(得分:3)
自我在begin transaction manual中解释:
如果遇到错误,则在BEGIN之后进行所有数据修改 可以回滚TRANSACTION以将数据返回到此已知状态 一致性。
答案是否定的:这是不可能的。对于您的场景,由于ACID行为,TableA和TableB插入都在同一事务中,如果插入之间发生“失电”,则当数据库上升时,将回退TableA插入。记住A的原子。
答案 1 :(得分:0)
不会发生这种情况,因为所有活动都先写入事务日志,而不是实际的数据文件,并且在电力故障的情况下,当sql server启动时,它将通过事务日志并回滚任何未完成的事务(你会注意到它启动的速度有多慢,或者数据库暂时处于恢复模式。
数据文件在一段时间后由作者写入,之后内存在内存中可用作脏页。