当我们使用事务时,是否可能在MsSql数据库中插入错误的信息

时间:2012-10-24 06:27:51

标签: sql-server

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

2 个答案:

答案 0 :(得分:3)

自我在begin transaction manual中解释:

  

如果遇到错误,则在BEGIN之后进行所有数据修改   可以回滚TRANSACTION以将数据返回到此已知状态   一致性。

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

答案 1 :(得分:0)

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

数据文件在一段时间后由作者写入,之后内存在内存中可用作脏页。