SQL Server中timestamp(時間戳)

SQL Server timestamp 數據類型與時間和日期無關。SQL Server timestamp 是二進制數字,它代表數據庫中數據修改發生的相對順序。實現 timestamp 數據類型最初是爲了支持 SQL Server 恢復算法。每次修改頁時,都會使用當前的 @@DBTS 值對其作一次標記,而後 @@DBTS 加1。這樣作足以幫助恢復過程肯定頁修改的相對次序,可是 timestamp 值與時間沒有任何關係。算法

@@DBTS 返回當前數據庫最後使用的時間戳值。插入或更新包含 timestamp 列的行時,將產生一個新的時間戳值。數據庫

 

select @@DBTS 設計

 

適用場景:索引

經過timestamp字段查詢變動數據,假如上次保存的時間戳的值是:0x0000000000163E30,那麼咱們經過下面的SQL腳本就能獲取到這個時間戳以後變動的記錄,獲取到這裏數據就能夠更新內存數據了內存

 

注意事項:io

1. 每一個數據庫都有一個計數器,當對數據庫中包含 timestamp 列的表執行插入或更新操做時,該計數器值就會增長。 該計數器是數據庫時間戳;select

2. 一個表只能有一個 timestamp 列;數據類型

3. 注意刪除數據操做是沒有辦法記錄時間戳的,因此你刪除記錄的邏輯應該是用一個字段標識這行記錄已經被刪除;二進制

4. 這一屬性使 timestamp 列不適合做爲鍵使用,尤爲是不能做爲主鍵使用;im

5. 若是該列屬於索引鍵,則對數據行的全部更新還將致使索引更新;

6. 若要返回數據庫的當前時間戳值:SELECT @@DBTS

7. 在 DDL 語句,請儘可能使用 rowversion 而不是 timestamp,在SSMS設計表的時候是沒有rowversion數據類型的;

8. 在 CREATE TABLE 或 ALTER TABLE 語句中,沒必要爲 timestamp 數據類型指定列名,若是不指定列名,則 Microsoft SQL Server 數據庫引擎將生成 timestamp 列名;但 rowversion 同義詞不具備這樣的行爲。 在使用 rowversion 時,必須指定列名。

9. 不可爲空的 rowversion 列在語義上等同於 binary(8) 列。 可爲空的 rowversion 列在語義上等同於 varbinary(8) 列。

相關文章
相關標籤/搜索