中状态"置疑"如何使用时间戳数据类

  介绍

这篇文章给大家介绍中状态"置疑"如何使用时间戳数据类,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

在SQL Server中联机丛书是这样说的:SQL服务器的时间戳数据类型与时间和日期无关. SQL服务器的时间戳是二进制数字,它表明数据库中数据修改发生的相对顺序。实现时间戳数据类型最初是为了支持SQL Server恢复。每次修改页时,都会使用当前的@@DBTS值对其做一次标记,然后@@DBTS加1。这样做足以帮助恢复过程确定页修改的相对次序,但是时间戳值与时间没有任何关系。我用口水话解释一下便于理解:我们知道数字类型有个“标识”属性,设置好“标识种子”、“标识递增量”,每增加一条记录时,这个字段的值就会在最近的一个标识值基础上自动增加,这样我们可以知道哪些记录是先添加的,哪些记录是后添加的,但是我们无法知道哪些记录修改过.timestamp这个类型的字段呢,每增加一条记录时,它会在最近的一个时间戳基础上自动增加,当修改某条记录时,它也会在最近的一个时间戳基础上自动增加,所以我们就知道哪些记录修改过了。时间戳这种数据类型表现自动生成的二进制数,确保这些数在数据库中是唯一的.timestamp一般用作给表行加版本戳的机制。存储大小为8字节。注释transact - SQL时间戳数据类型与在SQL - 92标准中定义的时间戳数据类型不同. SQL - 92时间戳数据类型等价于transact - SQL datetime数据类型。Microsoft&注册;SQL Server ?将来的版本可能会修改transact - sql时间戳数据类型的行为,使它与在标准中定义的行为一致。到那时,当前的时间戳数据类型将用rowversion数据类型替换。Microsoft&注册;SQL Server ?2000引入了时间戳数据类型的rowversion同义词。在DDL语句中尽可能使用rowversion而不使用timestamp.rowversion受数据类型同义词行为的制约。有关更多信息,请参见数据类型同义词。在CREATE TABLE或ALTER TABLE语句中,不必为时间戳数据类型提供列名:创建表ExampleTable (PriKey int主键、时间戳)如果没有提供列名,SQL Server将生成的时间戳列名.rowversion数据类型同义词不具有这样的行为。指定rowversion时必须提供列名。一个表只能有一个时间戳列。每次插入或更新包含时间戳列的行时,时间戳列中的值均会更新。这一属性使时间戳列不适合作为键使用,尤其是不能作为主键使用。对行的任何更新都会更改时间戳值,从而更改键值。如果该列属于主键,那么旧的键值将无效,进而引用该旧值的外键也将不再有效。如果该表在动态游标中引用,则所有更新均会更改游标中行的位置。如果该列属于索引键,则对数据行的所有更新还将导致索引更新。不可为空的时间戳列在语义上等价于二进制(8)列。可为空的时间戳列在语义上等价于varbinary(8)列。Microsoft SQL Server用两个字4节的整数内部存储datetime数据类型的值。第一个4字节存储基地日期(即1900年1月1日)之前或之后的天数。基础日期是系统参考日期。不允许早于1753年1月1日的datetime值。另外一个4字节存储以午夜后毫秒数所代表的每天的时间。代码如下:   @@DBTS(选择@@DBTS)为当前数据库返回当前时间戳数据类型的值。这一时间戳值保证在数据库中是唯一的。语法@@DBTS返回类型varbinary注释@@DBTS

返回当前数据库最后所使用的时间戳值。当带有时间戳列的一行被插入或更新时,会产生一个新的时间戳值。

关于中状态"置疑"如何使用时间戳数据类就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看的到。

中状态"置疑"如何使用时间戳数据类