有很多朋友也都會(huì)誤認(rèn)為:時(shí)間戳是一個(gè)時(shí)間字段,每次增加數(shù)據(jù)時(shí),填入當(dāng)前的時(shí)間值。其實(shí)這誤導(dǎo)了很多朋友。
時(shí)間戳僅僅是個(gè)一直在遞增的標(biāo)識(shí)版本號(hào),與時(shí)間沒(méi)有任何關(guān)系。

時(shí)間戳列一直+1遞增
1.基本概念
時(shí)間戳是數(shù)據(jù)庫(kù)中自動(dòng)生成的唯一二進(jìn)制數(shù)字,與時(shí)間和日期無(wú)關(guān)的,通常用作給表行加版本翟的機(jī)制。存儲(chǔ)大小為8個(gè)字節(jié)。
每個(gè)數(shù)據(jù)庫(kù)都有一個(gè)計(jì)數(shù)器,可用@@DBTS查看,當(dāng)對(duì)數(shù)據(jù)庫(kù)中包含timestamp列的表執(zhí)行插入或更新操作時(shí),該計(jì)數(shù)器值就會(huì)增加。該計(jì)數(shù)器是數(shù)據(jù)庫(kù)時(shí)間戳。這可以跟蹤數(shù)據(jù)庫(kù)內(nèi)的相對(duì)時(shí)間,而不是時(shí)鐘相關(guān)聯(lián)的實(shí)際時(shí)間。一個(gè)表只能有一個(gè)timestamp列。每次修改或插入包含timestamp列的行時(shí),就會(huì)在timestamp列中插入增量數(shù)據(jù)庫(kù)時(shí)間戳值。
使用某一行中的timestamp列可以很容易地確定該行中的任何值自上次讀取以后是否發(fā)生了更改。如果對(duì)行進(jìn)行了更改,就會(huì)更新該時(shí)間戳值。如果沒(méi)有對(duì)行進(jìn)行更改,則該時(shí)間戳值將與以前讀取該行時(shí)的時(shí)間戳值一致。
2時(shí)間戳的作用
在控制并發(fā)時(shí)起到作用,用戶同時(shí)打開(kāi)某條記錄開(kāi)始編輯,保存是可以判斷時(shí)間戳,因?yàn)橛涗浢看伪桓聲r(shí),系統(tǒng)都會(huì)自動(dòng)維護(hù)時(shí)間戳,所以如果保存時(shí)發(fā)現(xiàn)取出來(lái)的時(shí)間戳與數(shù)據(jù)庫(kù)中的時(shí)間戳不相等,說(shuō)明在這個(gè)過(guò)程中記錄被更新過(guò),這樣的話可以防止別人的更新被覆蓋。
3.時(shí)間戳的應(yīng)用
timestamp主要是記錄該行的最后修改時(shí)間戳,注意,這個(gè)時(shí)間戳是不可以轉(zhuǎn)換為時(shí)間的,只能標(biāo)注該行修改了。
(微軟的建議-- timestamp語(yǔ)法已被取代,在DDL語(yǔ)句,請(qǐng)盡量使用rowversion而不是timestamp。 rowversion就是timestamp