【发布时间】:2011-02-20 03:40:09
【问题描述】:
我在 mysql 表中有一个时间戳,属性为“ON UPDATE CURRENT_TIMESTAMP”。有没有办法在特殊场合手动禁用更新时间戳? (例如:更新条目以修改博客文章,但不重新日期)
【问题讨论】:
我在 mysql 表中有一个时间戳,属性为“ON UPDATE CURRENT_TIMESTAMP”。有没有办法在特殊场合手动禁用更新时间戳? (例如:更新条目以修改博客文章,但不重新日期)
【问题讨论】:
您可以在更新命令中手动将列的值设置为其当前值:
UPDATE table SET x=y, timestampColumn=timestampColumn WHERE a=b;
如果你没有在查询中设置值,它将根据表定义更新为当前时间戳。
【讨论】:
ON UPDATE、将 NOW() 添加到他的所有其他查询并重新测试他的应用程序所需的时间更长?
DEFAULT 值;只是ON UPDATE
有没有办法在特殊情况下手动禁用更新时间戳? (例如:更新条目以修改博客文章,但不重新日期)
听起来您需要配置默认约束,以便它仅在插入时填充列:
DEFAULT CURRENT_TIMESTAMP
将其更改为 only 意味着任何修订都不会触发时间戳值的更新。 IE:如果您昨天创建了博文,并在今天更正了一个错字 - 列中的日期仍然是昨天的。
【讨论】:
last_updated 字段(保持ON UPDATE CURRENT_TIMESTAMP 行为)除非仅在一个特定列上进行更新?实际上我正在建模一个 meta-data db 以保留某些 crons 的信息(它们的 source、sink、last_completion_time)。所以我last_updated字段只有在cron被实际修改时才需要更新(而不是在cron的last_completion_time字段被更新时)
让您的表/时间戳自动更新:
ALTER TABLE myTable
CHANGE myTimestampColumn
myTimestampColumn TIMESTAMP NOT NULL
DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP;
让它不自动更新:
ALTER TABLE myTable
CHANGE myTimestampColumn
myTimestampColumn TIMESTAMP NOT NULL
DEFAULT CURRENT_TIMESTAMP;
注意:“default current_timestamp”部分只是将其设置为默认时间的当前时间戳,因为该字段不为空。如果您愿意,您可以同时删除 not null 和默认值。
【讨论】:
不要使用时间戳,而是手动跟踪时间。
如果您真的想更新记录并且不更新它的时间戳,请使用:
UPDATE `table` SET `timestamp` = `timestamp`, `col` = 'new data' …;
【讨论】:
如果您确实在更新时更改了时间,那么您必须考虑到如果值已更新但未更改(更新了保存值),那么它不会更新“更新 Current_timestemp”,在这种情况下您应该手动设置时间
SET LastUpdatedDate=NOW() WHERE
【讨论】: