SQLServer时间戳的误解,与时间没有关系

有很多朋友也都会误认为:时间戳是一个时间字段 , 每次增加数据时 , 填入当前的时间值 。其实这误导了很多朋友 。
时间戳仅仅是个一直在递增的标识版本号 , 与时间没有任何关系 。

SQLServer时间戳的误解,与时间没有关系

文章插图
时间戳列一直+1递增
 
1.基本概念
时间戳是数据库中自动生成的唯一二进制数字 , 与时间和日期无关的 , 通常用作给表行加版本翟的机制 。存储大小为8个字节 。
每个数据库都有一个计数器,可用@@DBTS查看 , 当对数据库中包含timestamp列的表执行插入或更新操作时 , 该计数器值就会增加 。该计数器是数据库时间戳 。这可以跟踪数据库内的相对时间 , 而不是时钟相关联的实际时间 。一个表只能有一个timestamp列 。每次修改或插入包含timestamp列的行时 , 就会在timestamp列中插入增量数据库时间戳值 。
使用某一行中的timestamp列可以很容易地确定该行中的任何值自上次读取以后是否发生了更改 。如果对行进行了更改 , 就会更新该时间戳值 。如果没有对行进行更改 , 则该时间戳值将与以前读取该行时的时间戳值一致 。
2时间戳的作用
在控制并发时起到作用 , 用户同时打开某条记录开始编辑 , 保存是可以判断时间戳 , 因为记录每次被更新时 , 系统都会自动维护时间戳 , 所以如果保存时发现取出来的时间戳与数据库中的时间戳不相等 , 说明在这个过程中记录被更新过 , 这样的话可以防止别人的更新被覆盖 。
3.时间戳的应用
timestamp主要是记录该行的最后修改时间戳 , 注意 , 这个时间戳是不可以转换为时间的,只能标注该行修改了 。
(微软的建议-- timestamp语法已被取代,在DDL语句 , 请尽量使用rowversion而不是timestamp 。rowversion就是timestamp

【SQLServer时间戳的误解,与时间没有关系】


    推荐阅读