【问题标题】:Make TIMESTAMP column update even though I didn't change anything?即使我没有更改任何内容,也要更新 TIMESTAMP 列?
【发布时间】:2011-04-30 04:17:27
【问题描述】:

我有一个 MySql 表,它有一个时间戳列。

该表还有很多其他列。

我的页面上有一个“更改分类”部分。

当用户更改他们的分类时,我希望时间戳更新其时间戳。确实如此,但有时您根本不更改分类,您只是希望它被“更新”。

即使没有更新任何内容,我如何才能更新我的时间戳列?

即:

  UPDATE table
  SET text='hello'
  WHERE table.id='id_here';

在上面的例子中,如果“text”列已经是 hello,那么这里什么都不会发生。时间戳不会更新。

除了添加另一列之外,还有什么方法可以解决这个问题?任何 MySql 设置?

谢谢

【问题讨论】:

    标签: php sql mysql html database


    【解决方案1】:

    你为什么不直接用时间戳更新时间戳列?

      UPDATE table
      SET timestamp = now()
      WHERE table.id='id_here';
    

    或者我可能遗漏了您的问题的一部分?

    【讨论】:

    • "timestamp" 列将由 MySQL 自动更新,即无需显式指定它。但是,只有在行“更改”时才会更新:MySQL 将其定义为新值与旧值不同(不仅仅是与 WHERE 匹配的行)。可以手动更新时间戳列(这会起作用),但这会破坏时间戳(因此是问题)。
    • 我认为这对我来说是最简单的解决方案...但是将来我会手动执行此操作,使用日期时间...谢谢
    【解决方案2】:

    这并不是您问题的真正答案,但我认为时间戳列通常不是一个好主意。他们是一个坏主意的原因是这样的。您正在让 MySQL 自动执行某些操作,如果它应该自动执行的操作的想法与您想要它执行的操作的想法不完全一致,那么您就会陷入困境。

    我会添加一个额外的列,输入 datetime(取决于您需要的准确性)并始终明确更新它。

    【讨论】:

      【解决方案3】:

      时间戳列是个好主意,所有企业 DBMS 都有它们;都以相同的自动方式运行。它所做的“东西”是标准的、有明确记录的技术操作。它不能直接更新,只是为了防止人们做这样愚蠢的事情并破坏它的真正价值;供应商已正确保护您的数据库免受滥用和颠覆。

      滥用 Timestamp 列是个坏主意。

      试图让它做它从未设计过的事情,是个坏主意。

      UPDATE ... SET "hello" 到 "hello" 是一种严重的误用,是服务器上不必要的工作。

      您正试图让 Timestamp 列来识别 Timestamp 以外的内容。馊主意。那(事实)应该在数据(一列)中表示。正确地做。向表中添加 DATE 列:RenewedDate。

      【讨论】:

        猜你喜欢
        • 2018-11-12
        • 2013-02-12
        • 1970-01-01
        • 2016-08-21
        • 2023-03-30
        • 2011-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多