我有一个SQL Server时态表“ person”,其记录如下:
name | modified_by
-------------------------
John | 1
如果我执行以下sql语句
update person set modified_by = 2 where name = 'John'
delete from person where name = 'John'
我在历史记录表中看到两条记录,它们分别具有Modifyed_by = 1和2。
如果我在交易中执行了两条语句
begin transaction
update person set modified_by = 2 where name = 'John'
delete from person where name = 'John'
commit transaction
我在历史记录表中只看到一条记录,其Modifyed_by = 1
这是预期的行为吗?为什么?
答案 0 :(得分:0)
是的,这是预期的。
事务中的所有语句要么完全执行,要么根本不执行。没有中间步骤。
在您的示例中,由于始终会删除相关行,因此update语句浪费资源。
但是,没有事务的情况下,您的第一条语句将导致表的三个一致性状态:在第一个语句之前,在更新之后和在删除之后。