• 时间戳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

  • 相关阅读:
    centos7.6 使用yum安装mysql5.7
    解决hadoop本地库问题
    docker-compose 启动警告
    docker 安装zabbix5.0 界面乱码问题解决
    docker 部署zabbix问题
    zookeeper 超时问题
    hbase regionserver异常宕机
    (转载)hadoop 滚动升级
    hadoop Requested data length 86483783 is longer than maximum configured RPC length
    zkfc 异常退出问题,报错Received stat error from Zookeeper. code:CONNECTIONLOSS
  • 原文地址:https://www.cnblogs.com/riasky/p/3455548.html
Copyright © 2020-2023  润新知