微軟文檔鏈接:https://msdn.microsoft.com/zh-cn/library/ms182776.aspx
釋義(rowversion和timestamp是一樣的好比C#里的(String和string是一個概念 同義詞,寫法不一樣而已 ),不過微軟好像建議用 rowversion ,數據庫上操作還是有差別的暫時未深入研究,可查詢下面的超鏈接看看):
公開數據庫中自動生成的唯一二進制數字的數據類型。 rowversion 通常用作給表行加版本戳的機制。 存儲大小為 8 個字節。 rowversion 數據類型只是遞增的數字,不保留日期或時間。 若要記錄日期或時間,請使用 datetime2 數據類型。
注釋
每個數據庫都有一個計數器,當對數據庫中包含 rowversion 列的表執行插入或更新操作時,該計數器值就會增加。 此計數器是數據庫行版本。 這可以跟蹤數據庫內的相對時間,而不是時鐘相關聯的實際時間。 一個表只能有一個 rowversion 列。 每次修改或插入包含 rowversion 列的行時,就會在 rowversion 列中插入經過增量的數據庫行版本值。 這一屬性使 rowversion 列不適合作為鍵使用,尤其是不能作為主鍵使用。 對行的任何更新都會更改行版本值,從而更改鍵值。 如果該列屬于主鍵,那么舊的鍵值將無效,進而引用該舊值的外鍵也將不再有效。 如果該表在動態游標中引用,則所有更新均會更改游標中行的位置。 如果該列屬于索引鍵,則對數據行的所有更新還將導致索引更新。
timestamp 的數據類型為 rowversion 數據類型的同義詞,并具有數據類型同義詞的行為。 在 DDL 語句,請盡量使用 rowversion 而不是 timestamp。 有關詳細信息,請參閱數據類型同義詞 (Transact-SQL)。
Transact-SQL timestamp 數據類型不同于在 ISO 標準中定義的 timestamp 數據類型。
從上面釋義才醒悟,時間戳 和日期、時間半毛錢關系都沒有。 只是個二進制值。哎.... timestamp 大家基本都知道用于并發控制的,但怎么實現 怎么操作呢。?
剩下的就不多扯了 : 讓我們看看微軟是如何介紹 timestamp的并發控制的: 補充下 查詢當前數據庫時間戳 : SELECT @@DBTS
CREATE TABLE MyTest2 (myKey int PRIMARY KEY ,myValue int, TS timestamp); GO INSERT INTO MyTest2 (myKey, myValue) VALUES (1, 0); GO INSERT INTO MyTest2 (myKey, myValue) VALUES (2, 0); GO DECLARE @t TABLE (myKey int); UPDATE MyTest2 SET myValue = 2 OUTPUT inserted.myKey INTO @t(myKey) WHERE myKey = 1 AND TS = myValue; IF (SELECT COUNT(*) FROM @t) = 0 BEGIN RAISERROR ('error changing row with myKey = %d' ,16 -- Severity. ,1 -- State ,1) -- myKey that was changed END;
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com