SQL Server中timestamp(時間戳)


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

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

 

select @@DBTS 

 

適用場景:

通過timestamp字段查詢變更數據,假如上次保存的時間戳的值是:0x0000000000163E30,那么我們通過下面的SQL腳本就能獲取到這個時間戳之后變更的記錄,獲取到這里數據就可以更新內存數據了

 

注意事項:

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

2. 一個表只能有一個 timestamp 列;

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

4. 這一屬性使 timestamp 列不適合作為鍵使用,尤其是不能作為主鍵使用;

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) 列。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM