【问题标题】:Why TIMESTAMP instead of DATETIME in this instance?为什么在这种情况下使用 TIMESTAMP 而不是 DATETIME?
【发布时间】:2017-05-17 17:14:37
【问题描述】:

在我读过的许多关于 SQL 时间戳使用的示例中,一个典型的情况是添加时间戳列以防止一种竞争条件,即用户正在更改由于另一个用户“进入”而失去完整性的数据先有”。

更具体地说,在对行发布更新之前,业务逻辑会交叉检查他们认为正在更改的时间戳,以免与行版本控制混淆。

问题

为什么 DATETIME 不足以完成这项任务?事实上,按照这种逻辑——为什么不适合任何唯一的数据类型呢?例如,每次发布更新时的 NEWID()?

【问题讨论】:

  • 根据我的经验,一个短整数就足够了。
  • @Pointy - 我看不出有什么理由不这样做,这就是我的困惑所在。这是一个被广泛提供的例子,我不确定我错过了什么。
  • 你说的是哪个 DBMS?
  • @a_horse_with_no_name - SQL Server 2014。
  • SQL Server 中的timestamp 确实存储“日期和时间”。

标签: tsql datetime sql-server-2014


【解决方案1】:

看来我错过了时间戳的基本功能,它会自动更新。

所以在一行上调用UPDATE 将自动增加它的TIMESTAMP 列,而无需我手动设置它。

我会在此处留下这个答案,以防万一有人知道我可能还错过了什么。

【讨论】:

    【解决方案2】:

    在 mySQL 中,timestamp 是一种物理上比 datetime 更小的数据类型。此外,时间戳是通用的,忽略所有时区。对于国际产品,这一点很重要。

    不推荐使用 ID,因为它们通常在插入/更新时生成。

    【讨论】:

      猜你喜欢
      • 2018-07-03
      • 2019-12-25
      • 2017-06-11
      • 2017-01-07
      • 2013-04-23
      • 1970-01-01
      • 1970-01-01
      • 2014-03-24
      • 1970-01-01
      相关资源
      最近更新 更多