时间戳列是唯一的吗?

Posted

技术标签:

【中文标题】时间戳列是唯一的吗?【英文标题】:Is TimeStamp column unique? 【发布时间】:2012-05-23 21:29:28 【问题描述】:

TimeStamp 在所有行中都是唯一的吗?

上面有唯一索引吗?

【问题讨论】:

【参考方案1】:

timestamp 是一种数据类型,它公开自动生成的二进制数,保证在数据库中是唯一的。时间戳通常用作对表行进行版本标记的机制。存储大小为 8 个字节。


欲了解更多信息,请查看THIS 文章。

【讨论】:

它的容量是多少?我们有可能在TimeStamp 列上有OverFlow 吗? @Kerezo 容量至少为 2^63(如果不是 2^64)。你需要大约 9.22×10^18 的增量来溢出它。 @Kerezo 如今,这几乎是不可能的!如果您在 122 年内每秒插入 10000 个类似的东西,您将溢出时间戳:P @aF 从我的工作来看,这 10000 每秒需要 5800 万年才能用完。 (我只检查过,因为你提到的速率会在大约 4 个月内溢出 facebook,而他们的 350 万行每秒更新一次——这正是他们在 2010 年使用的) 这在实践中是不正确的。请参阅我的答案以获得解释。 ***.com/a/49918160/1444548【参考方案2】:

来自MSDN article,强调我的:

Timestamp 是一种数据类型,它公开自动生成的、唯一的 数据库中的二进制数。时间戳通常用作 版本标记表行的机制。存储大小为 8 字节。 时间戳数据类型只是一个递增的数字,并且确实 不保留日期或时间。 要记录日期或时间,请使用 日期时间数据类型。

它还提供了这个有趣的注释:

可以使用 SELECT INTO 生成重复的时间戳值 SELECT 列表中包含时间戳列的语句。我们不 建议以这种方式使用时间戳。

在 SQL Server 2008 及更高版本中,timestamp 类型已重命名为 rowversion,大概是为了更好地反映其用途和价值。

【讨论】:

【参考方案3】:

文档说

数据库中的唯一二进制数

但在实践中,您可能会遇到这种说法不正确的情况。由于该值是从 database global counter 生成的,因此您在恢复数据库或在 tempdb 的表中使用 timestamp 时可能会遇到问题。

可以看到下一个值:

Select @@DBTS

在 SQL Server 2000 之前,有一个未记录的命令来更改值

DBCC CHECKDBTS (dbId, newTimestamp)

要更改 SQL Server 的非古代版本中的时间戳,请参阅此答案:

https://dba.stackexchange.com/a/11088/149485

【讨论】:

以上是关于时间戳列是唯一的吗?的主要内容,如果未能解决你的问题,请参考以下文章

Pyspark 将字符串转换为日期时间戳列,包含两种不同的格式

更新时间戳列

Bigquery:如何将 2 个时间戳列合并为 1 个列?

Apache Spark 从时间戳列中减去天数

BigQuery 日期和时间函数在时间戳列上返回 NULL

将 UTC 时间戳(毫秒)插入 Oracle 时间戳列