单行 INSERT 是原子的(对于外部读取器)吗?想象一下它发生在一个有 1M 列的表上。
在执行单个INSERT
语句(即“单行”类型),是否有可能同时发生的读取操作(可能使用“读取未提交”隔离级别)仅读取some值(列)?
我对 MS SQL Server 的行为特别感兴趣,尽管我认为这对于所有主要供应商来说都是相似的。
有关此事的官方文档链接的奖励积分。
只读取一些值?
是的,这可能会发生。 DML 是原子的,因为写入全部或全部保留,但并发读取可以以非常奇怪的方式观察部分写入。对于多行写入,这显然是可能的,但即使单行写入对于读者来说也不是原子的。
例如,您可能会发现一个非聚集索引的插入已完成,但另一个非聚集索引的插入尚未完成。在罕见的、人为的案例中,读者可以察觉到这一点。例如,如果你说:
select *
from T t1 with (index(1))
full outer join T t2 with (index(2)) on (someUniqueCondition)
您可以有效地获得两个索引之间的差异,该差异可以不为零。实现此演示不需要索引提示。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)