【问题标题】:mysql timestamp updates when record is amended修改记录时mysql时间戳更新
【发布时间】:2010-09-09 06:49:46
【问题描述】:

我不久前提出了一个关于此的问题,但我仍然有一个问题。我有一个 mysql5 数据库,其中包含一个销售表,其中包含一个表示销售的时间戳。如果 sales 表中的某个字段在修改或更改时时间戳更新为当前时间(更改的时间)。为了防止这种情况,我取消了 on_update_select_current_timestamp 选项,但时间戳仍然更改?

这是该字段在 phpmyadmin 中的外观

有谁知道我应该做什么,取消选中 CURRENT_TIMESTAMP 选项似乎重置了 on_update_select_current_timestamp 触发器

【问题讨论】:

  • 我知道很久以前有人问过这个问题,但我的解决方案是将默认值设置为 null 并且不使用 current_timestamp 更新它。这样,它没有更新,也没有影响我之前的数据。在 phpmyadmin (4.2.11) 中,您可以通过选中空复选框来执行此操作。

标签: php mysql phpmyadmin


【解决方案1】:

如果您不希望该字段自动更新,请不要使用时间戳类型字段
请改用日期时间。

【讨论】:

  • 这里有点愚蠢的问题但是...我的数据库有数千条记录,如果我更改数据库表以便时间戳字段是日期时间,它会搞砸我的网站,例如我的 sql插入不起作用,销售时间的格式不正确?
  • @Mike 是的,这是一个愚蠢的问题。您还必须更改代码。我的回答不是关于你的遗留代码以及如何处理愚蠢的设计缺陷。但只是关于数据库设计,如何正确使用您的工具。遗留代码的后果是另一回事。虽然代码重写没有什么不好。它被称为重构,它是你工作的一部分。
  • 不过你很幸运,因为在 mysql5 中,时间戳的格式与日期时间相同,afaik
  • 设计缺陷!你一针见血了!我从我的设计缺陷中学到了很多东西!感谢您的帮助。
【解决方案2】:

检查表定义,如果CURRENT-TIMESTAMP 选项确实被禁用。

如果它被禁用,它应该看起来像...

CREATE TABLE `sometable` (
  ...somefields...
  `Sale_Time` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' INT(11) DEFAULT NULL,
  ...somefields...
) ENGINE=someengine

...否则CURRENT-TIMESTAMP 将在此行中可见。当它被禁用时,它不会在更新时更新,除非其他一些数据库函数(触发器等)在更新字段时更改它。

【讨论】:

    猜你喜欢
    • 2015-01-22
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    • 2018-03-24
    • 2013-08-15
    • 2015-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多