timestamp 這種數(shù)據(jù)類型表現(xiàn)自動(dòng)生成的二進(jìn)制數(shù),確保這些數(shù)在數(shù)據(jù)庫(kù)中是唯一的。timestamp 一般用作給表行加版本戳的機(jī)制。存儲(chǔ)大小為 8 字節(jié)。
Transact-SQL timestamp 數(shù)據(jù)類型與在 SQL-92 標(biāo)準(zhǔn)中定義的 timestamp 數(shù)據(jù)類型不同。SQL-92 timestamp 數(shù)據(jù)類型等價(jià)于 Transact-SQL datetime 數(shù)據(jù)類型。
Microsoft® SQL Server™ 將來(lái)的版本可能會(huì)修改 Transact-SQL timestamp 數(shù)據(jù)類型的行為,使它與在標(biāo)準(zhǔn)中定義的行為一致。到那時(shí),當(dāng)前的 timestamp 數(shù)據(jù)類型將用 rowversion 數(shù)據(jù)類型替換。
Microsoft® SQL Server™ 2000 引入了 timestamp 數(shù)據(jù)類型的 rowversion 同義詞。在 DDL 語(yǔ)句中盡可能使用 rowversion 而不使用 timestamp。rowversion 受數(shù)據(jù)類型同義詞行為的制約。有關(guān)更多信息,請(qǐng)參見(jiàn)數(shù)據(jù)類型同義詞。
在 CREATE TABLE 或 ALTER TABLE 語(yǔ)句中,不必為 timestamp 數(shù)據(jù)類型提供列名:
CREATE TABLE ExampleTable (PriKey int PRIMARY KEY, timestamp)
如果沒(méi)有提供列名,SQL Server 將生成 timestamp 的列名。rowversion 數(shù)據(jù)類型同義詞不具有這樣的行為。指定 rowversion 時(shí)必須提供列名。
一個(gè)表只能有一個(gè) timestamp 列。每次插入或更新包含 timestamp 列的行時(shí),timestamp 列中的值均會(huì)更新。這一屬性使 timestamp 列不適合作為鍵使用,尤其是不能作為主鍵使用。對(duì)行的任何更新都會(huì)更改 timestamp 值,從而更改鍵值。如果該列屬于主鍵,那么舊的鍵值將無(wú)效,進(jìn)而引用該舊值的外鍵也將不再有效。如果該表在動(dòng)態(tài)游標(biāo)中引用,則所有更新均會(huì)更改游標(biāo)中行的位置。如果該列屬于索引鍵,則對(duì)數(shù)據(jù)行的所有更新還將導(dǎo)致索引更新。
不可為空的 timestamp 列在語(yǔ)義上等價(jià)于 binary(8) 列。可為空的 timestamp 列在語(yǔ)義上等價(jià)于 varbinary(8) 列。
相關(guān)文章