zoukankan      html  css  js  c++  java
  • 时间戳timestamp

    时间戳

    数据库中自动生成的 唯一的 二进制的数据,通常用作给数据表的行添加版本戳的机制。

    • timestamp与时间和日期无关。
    • timestamp存储大小为8字节。
    • 一个数据表只能有一个timestamp列。
    • 每次修改或者插入包含timestamp列的行时,就会在timestamp列中插入增量数据库时间戳值。
    • timestamp列不适合于作为键使用,因为任何更新都会更改timestamp的值。

    时间戳的作用及应用

    • 可以防止丢失更新

                 多用户同时修改一行数据,最后提交修改的数据会覆盖前面提交的数据,造成前面的更新丢失。

    • 可以应用于数据增量更新

                若将一个表中更新的数据Copy到另外一个表,就可以根据时间戳确认哪些数据是更新过的数据。

    实例

    新建一个含有时间戳列的表tb_Class

     

    插入若干条数据,并执行SQL查询:

    select * from tb_Class;

     

    执行下面的SQL查询:

    select ts from tb_Class where  classid=1
    update tb_Class set teacher='ly' where classid=1
    select ts from tb_Class where  classid=1


    从结果可以看出:更新行数据前后的时间戳的值发生改变。

    防止更新丢失的实例(来自于网络)

    declare table tmp(a varchar(10),b rowsversion) 
    insert into tmp(a) values( 'abc') 

    事务A: 

    declare @rv rowversion 
    select @rv=b from tmp where a='abc' 
    waitfor delay '00:00:05' 
    update tmp set a='xyz' where b=@rv 

    事务 B : 

    update tmp set a='aaa' where b=@rv 


    事务 A 在执行完毕后会发现并没有将 'aaa'给抹去,这样就防止了丢失更新的现象。 

    补充

    推荐使用 timestamp 语法。 后续版本的 Microsoft SQL Server 将删除该功能。请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。推荐使用rowversion。微软MSDN

  • 相关阅读:
    洛谷P1170 兔八哥与猎人 欧拉函数的应用
    洛谷P1056 排座椅
    洛谷P1177 【模板】快速排序
    洛谷1059 明明的随机数
    洛谷P1372 又是毕业季I
    洛谷P1042 乒乓球
    洛谷P1086 花生采摘
    洛谷P1031 均分纸牌
    洛谷P1068 分数线划定
    洛谷P1781 宇宙总统
  • 原文地址:https://www.cnblogs.com/riasky/p/3455548.html
Copyright © 2011-2022 走看看