zoukankan      html  css  js  c++  java
  • timestamp 与 rowversion

    联机丛书:

    timestamp

    timestamp 这种数据类型表现自动生成的二进制数,确保这些数在数据库中是唯一的。timestamp 一般用作给表行加版本戳的机制。存储大小为 8 字节。

    注释

    Transact-SQL timestamp 数据类型与在 SQL-92 标准中定义的 timestamp 数据类型不同。SQL-92 timestamp 数据类型等价于 Transact-SQL datetime 数据类型。

    Microsoft® SQL Server™ 将来的版本可能会修改 Transact-SQL timestamp 数据类型的行为,使它与在标准中定义的行为一致。到那时,当前的 timestamp 数据类型将用 rowversion 数据类型替换。

    Microsoft® SQL Server™ 2000 引入了 timestamp 数据类型的 rowversion 同义词。在 DDL 语句中尽可能使用 rowversion 而不使用 timestamp。rowversion 受数据类型同义词行为的制约。有关更多信息,请参见数据类型同义词。

    在 CREATE TABLE 或 ALTER TABLE 语句中,不必为 timestamp 数据类型提供列名:

    CREATE TABLE ExampleTable (PriKey int PRIMARY KEY, timestamp)

    如果没有提供列名,SQL Server 将生成 timestamp 的列名。rowversion 数据类型同义词不具有这样的行为。指定 rowversion 时必须提供列名。

    一个表只能有一个 timestamp 列。每次插入或更新包含 timestamp 列的行时,timestamp 列中的值均会更新。这一属性使 timestamp 列不适合作为键使用,尤其是不能作为主键使用。对行的任何更新都会更改 timestamp 值,从而更改键值。如果该列属于主键,那么旧的键值将无效,进而引用该旧值的外键也将不再有效。如果该表在动态游标中引用,则所有更新均会更改游标中行的位置。如果该列属于索引键,则对数据行的所有更新还将导致索引更新。

    不可为空的 timestamp 列在语义上等价于 binary(8) 列。可为空的 timestamp 列在语义上等价于 varbinary(8) 列。

    IF OBJECT_ID('test_timestamp') IS NOT NULL  
    BEGIN  
        DROP TABLE test_timestamp  
    END  
    GO  
    CREATE TABLE test_timestamp  
    (  
        id INT PRIMARY KEY IDENTITY(1,1),  
        tname NVARCHAR(20),  
        [rowversion] TIMESTAMP    
    )  
    GO  
    INSERT INTO test_timestamp (tname)  
    SELECT 't1' UNION  
    SELECT 't2' UNION  
    SELECT 't3' UNION  
    SELECT 't4'  
      
    SELECT * FROM test_timestamp tt  
      
    UPDATE test_timestamp  
    SET tname = 't1_update'  
    WHERE id=1  
    --1. 仅仅获取已更新的行  
    --   但之前的最大的那个 rowversion 要另外记录  
    SELECT * FROM test_timestamp tt WHERE tt.rowversion>0x00000000000007DC  
      
    --2. 在两人同时修改同一条数据时,避免 先取出/后保存 覆盖前面的记录  
    DECLARE @rowversion TIMESTAMP  
    SELECT @rowversion = rowversion FROM test_timestamp tt WHERE tt.id=1;  
    --过了 5 秒后再修改, 在这 5 秒之内如果有其它update语句修改过此行则此修改无效了.  
    waitfor delay '00:00:05'  
    update test_timestamp set tname='t1_u01' where id=1 AND rowversion=@rowversion  
      
    SELECT * FROM test_timestamp tt WHERE tt.id=1  

    转自:http://blog.csdn.net/yenange/article/details/14450691

  • 相关阅读:
    Lakehouse: 统一数据仓库和高级分析的新一代开放平台
    mac进入恢复模式,关闭/启动系统完整性(SIP)
    多个xcode版本并存,切换xcode版本
    pod执行指定缓存目录,多版本pod执行缓存目录被清问题
    java特殊处理String.format中的%,使用%做一次转义
    html div设置占屏幕占比高度(使用vh)
    vue+leaflet 地图相关
    vue 集成天地图
    vue iframe嵌套外部网页
    Fabric.js
  • 原文地址:https://www.cnblogs.com/shijingjing07/p/5720715.html
Copyright © 2011-2022 走看看