时间戳
来源:互联网 发布:linux输出重定向命令 编辑:程序博客网 时间:2024/05/08 12:10
2009-01-05 23:37:53| 分类:ASP.NET/C# | 标签:|字号大中小 订阅
SQL Server 里有数据类型 timestamp,这里我们将利用 timestamp 来避免更新冲突。
比如一个内容管理系统,A 正在编辑某一篇文章,B 也正在编辑该文章,A 和 B 都不知道对方在编辑这篇文章,双方保存后,都以为已经成功保存,实际上,数据库中只保存了最后提交的记录(先提交的记录被覆盖),这就造成了数据库中的数据与操作者所认为的不一样。
要避免这种更新冲突,一种方法可以采用模拟锁的形式,一个人在编辑另一个人就不允许编辑,但比较麻烦,由于这种更新冲突并非常见,投入较大精力在这上面,不值。这里使用 timestamp 轻松实现避免更新冲突。
每一个数据库都有一个计数器,这个计数器记录着数据行的插入、更新行为。如果我们为一个表中增加 timestamp 列,那么,该列将记录每一个数据行的计数器值。
假如数据库中当前的计数器是 20(实际中不是数字类型,为了方便解释,这里用数字类型):那么在表 A 中插入一条记录后,插入行的 timestamp 为 21;然后更新表 B 的一条记录后,更新行的 timestamp 为 22;现在再更新刚才插入的行,此时其 timestamp 为 23。
可以看出,每个行都有一个 timestamp,并且是在数据库的所有表中唯一的,当更新行时,被更新的行的 timestamp 会加 1。注意删除不影响计数器。
timestamp 作用
timestamp 就是设计来避免更新冲突的,您可以参见利用 timestamp 避免更新冲突这篇文章。当然还有其它一些作用,比如 SQL Server 全文索引时用以增量填充。
timestamp 应用
我们只需要添加一个为 timestamp 类型的列就可以了,它会自动记下当前计数器的值。一个表只能有一个 timestamp 列,并且不能将该列作为主键。不可为空的 timestamp 列在语义上等价于 binary(8) 列;可为空的 timestamp 列在语义上等价于 varbinary(8) 列。
timestamp 会重复吗?
可能会,在使用 select into 时。
如何查看数据库中当前的 timestamp?
请使用 @@DBTS,比如在查询分析器中用:print @@DBTS。
增、改没有 timestamp 列的表数据时,@@DBTS 会变吗?
不会。
- 时间戳转时间
- 时间戳转时间
- 时间戳转时间
- 时间戳转换时间
- 时间戳转时间
- 时间戳转时间
- 时间戳转时间
- 时间和时间戳
- 时间戳与时间
- 时间戳时间转
- 时间戳转换时间
- 时间:UTC时间、GMT时间、本地时间、Unix时间戳
- 时间:UTC时间、GMT时间、本地时间、Unix时间戳
- 【java时间戳】时间戳转时间
- 时间戳转时间字符串和时间
- 时间戳
- 时间戳
- 时间戳
- 知易Cocos2D-iPhone 游戏开发教程001
- 程序员面试宝典之 C和C++的关系
- HDOJ 2294 - Pendant
- 俄罗斯方块
- SQL Server 2005 Express tcp/ip远程访问设置
- 时间戳
- 优雅框架授权验证页面
- windows cmd 使用mysql
- Java反射
- 数据库优化
- iText生产PDF
- 一些常用php函数整理
- javascript 手机号码正则表达式验证函数
- Flex事件(转)