对于 MS SQL 服务器,当我rv rowversion在表定义中声明类似的内容时,我可以访问记录的 rowversion 值。它对表的大小有什么影响吗?
如果我理解正确,无论是将列显式还是隐藏,都会独立地为记录存储 rowversion 值。因此,使列显式不应导致记录(表的)大小的增加。这个假设正确吗?
“隐藏”和“显式”行版本是完全不同的野兽。显式rowversion(又名timestamp用词不当)是表模式的一部分,所有行的固定大小为 8 字节。该rowversion列值可以被用于确定是否一个行已经改变,因为它是最后在任一T-SQL或应用程序代码的乐观并发检查的一部分检索。
隐藏的 rowversion 是内部行结构中的一个 14 字节值,数据库引擎在内部使用它来支持在打开ALLOW_SNAPSHOT_ISOLATION或READ_COMMITTED_SNAPSHOT数据库选项时的一致性。与 不同rowversion,这个内部值不是架构的一部分,也不是直接公开的。字段 (sic) 可能存在也可能不存在于给定的记录中,因为它是由 SQL Server 根据需要添加和维护的,以支持行版本控制而不是锁定以实现一致性。
内部行版本字段和rowversion列值彼此独立。两者可能存在于同一记录中。