时间戳和其用法

概要

在 MicrosoftSQLServer, timestamp 是唯一 6 字节整数来自每数据库, 单个源并自动递增每当该数据库中更改任何 大多数数据库对象具有 timestamp 嵌入它们默认 ; 表中行不。

时间戳添加到表通过包括一列具有类型 " timestamp "。 时间戳和过程内部操作行中是 8 个字节的可变长度二进制字段包含 6 个字节 timestamp 值, 是当前行最后插入或更新时。 行更新, 时行中 timestamp 将出现, 因为几个其他对象隐式更新行更新页 timestamp (日志 timestamp、 时间相关索引戳和等等) 期间被加以上。

回到顶端

更多信息

初始值

特定数据库中时间戳开头时创建新数据库, 因为新数据库是实际 " 克 " 从 " 型号 " 数据库 " 模型 " 数据库中当前值。

回到顶端

最大值

时间戳增大直到到达最大值, 可以将存储在 6 字节 (2**48)。 当达到此最, 数据库不允许任何多更新。

当只有 1,000,000 timestamp 值处于数据库会生成 935 警告消息。

只有这样才开始是要复制出的所有数据与 BCP 然后重新创建数据库 ; 不有助于转储和还原。 这是因为 2**48 秒, 100 事务上不会换行超过 100 多年不主要问题。

回到顶端

使用

时间戳代替锁定用于防止多用户浏览同一表, 执行偶尔更新时更新冲突。 允许多并发比锁定因为没有行实际上锁定, 除对于提交更新时间戳。

浏览模式通过构造 WHERE 子句包含 timestamp 值 UPDATE 语句上使用时间戳。 之前如果之后首用户具有读取它, 第二个用户更新行但首用户已更新它, 中 WHERE 子句会更新以返回影响 " 0 行 " timestamp 项。 如果会, 是备份到应用程序来决定要做什么。 一个选项是: 显示消息和新值的行, 并允许用户以重试。

如果应用程序想要发布更新, 不管事实其他用户已更改行, 它才需要重新发出 UPDATE 命令没有 WHERE 子句中 timestamp 项。

不实际更新行, 应用程序可测试是否通过与将具有 UPDATE 上使用了与同一 WHERE 子句, 发出 SELECT 其他用户已更新行。 如果您收到消息 " 未找到, " 有人更改行。

新 timestamp 作为 by-product 的更新返回到客户端。 它可用于应用程序通过 dbtsnewval() 函数。 如果更新是不成功, 从服务器返回没有 timestamp。 此功能允许应用程序来执行多个更新同一行上不必发出冗余读取来获取新的 timestamp 值。

因为时间戳来增加数据库, 内始终保证它们可用作如唯一 (虽然不连续) 行标识符。 注意要使用仅在绝对必要这样 nonrelational 技术。
posted @ 2008-05-07 11:59  乱炖er  阅读(1722)  评论(0编辑  收藏  举报