微軟文檔鏈接:https://msdn.microsoft.com/zh-cn/library/ms182776.aspx
釋義(rowversion和timestamp是一樣的好比C#里的(String和string是一個概念 同義詞,寫法不一樣而已 ),不過微軟好像建議用 rowversion ,數(shù)據(jù)庫上操作還是有差別的暫時未深入研究,可查詢下面的超鏈接看看):
公開數(shù)據(jù)庫中自動生成的唯一二進制數(shù)字的數(shù)據(jù)類型。 rowversion 通常用作給表行加版本戳的機制。 存儲大小為 8 個字節(jié)。 rowversion 數(shù)據(jù)類型只是遞增的數(shù)字,不保留日期或時間。 若要記錄日期或時間,請使用 datetime2 數(shù)據(jù)類型。
注釋
每個數(shù)據(jù)庫都有一個計數(shù)器,當(dāng)對數(shù)據(jù)庫中包含 rowversion 列的表執(zhí)行插入或更新操作時,該計數(shù)器值就會增加。 此計數(shù)器是數(shù)據(jù)庫行版本。 這可以跟蹤數(shù)據(jù)庫內(nèi)的相對時間,而不是時鐘相關(guān)聯(lián)的實際時間。 一個表只能有一個 rowversion 列。 每次修改或插入包含 rowversion 列的行時,就會在 rowversion 列中插入經(jīng)過增量的數(shù)據(jù)庫行版本值。 這一屬性使 rowversion 列不適合作為鍵使用,尤其是不能作為主鍵使用。 對行的任何更新都會更改行版本值,從而更改鍵值。 如果該列屬于主鍵,那么舊的鍵值將無效,進而引用該舊值的外鍵也將不再有效。 如果該表在動態(tài)游標(biāo)中引用,則所有更新均會更改游標(biāo)中行的位置。 如果該列屬于索引鍵,則對數(shù)據(jù)行的所有更新還將導(dǎo)致索引更新。
timestamp 的數(shù)據(jù)類型為 rowversion 數(shù)據(jù)類型的同義詞,并具有數(shù)據(jù)類型同義詞的行為。 在 DDL 語句,請盡量使用 rowversion 而不是 timestamp。 有關(guān)詳細信息,請參閱數(shù)據(jù)類型同義詞 (Transact-SQL)。
Transact-SQL timestamp 數(shù)據(jù)類型不同于在 ISO 標(biāo)準(zhǔn)中定義的 timestamp 數(shù)據(jù)類型。
從上面釋義才醒悟,時間戳 和日期、時間半毛錢關(guān)系都沒有。 只是個二進制值。哎.... timestamp 大家基本都知道用于并發(fā)控制的,但怎么實現(xiàn) 怎么操作呢。?
剩下的就不多扯了 : 讓我們看看微軟是如何介紹 timestamp的并發(fā)控制的: 補充下 查詢當(dāng)前數(shù)據(jù)庫時間戳 : 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;
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com