我在mysql表中有一个属性为“ ON UPDATE CURRENT_TIMESTAMP”的时间戳。有没有办法在特殊情况下手动禁用更新时间戳?(例如:更新条目以修改博客文章,但不重新添加日期)
Answers:
有没有办法在特殊情况下手动禁用更新时间戳?(例如:更新条目以修改博客文章,但不重新添加日期)
听起来您需要配置默认约束,以便仅在插入时填充列:
DEFAULT CURRENT_TIMESTAMP
将其更改为仅这意味着任何修订都不会触发时间戳值的更新。IE:如果您昨天创建了博客文章,并且今天更正了一个错字-列中的日期仍然是昨天。
last_updated
字段(保持ON UPDATE CURRENT_TIMESTAMP
行为)怎么办,除非仅在一个特定的列上进行更新?实际上,我正在对元数据数据库进行建模以保留某些cron
s的信息(它们的源,接收器,last_completion_time)。因此,last_updated
只有在实际修改了cron时,才必须更新该字段(而不是在cron的last_completion_time
字段被更新时)
您可以在update命令中手动将列的值设置为其当前值:
UPDATE table SET x=y, timestampColumn=timestampColumn WHERE a=b;
如果您未在查询中设置值,则将根据表定义将其更新为当前时间戳。
ON UPDATE
,添加NOW()
所有其他查询并重新测试他的应用所需的时间还长?
DEFAULT
价值。只是ON UPDATE
要使表/时间戳自动更新:
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;
注意:“默认current_timestamp”部分只是在默认时间将其设置为当前戳记,因为该字段不是null。如果愿意,可以同时删除not null和默认值。
不要使用时间戳,而是手动跟踪时间。
如果您确实要更新记录而不更新,请使用时间戳记:
UPDATE `table` SET `timestamp` = `timestamp`, `col` = 'new data' …;
如果您确实在更新时更改了timestemp,则必须考虑到如果值已更新但未更改(已更新保存值),那么它将不会更新“ on update Current_timestemp”,在这种情况下,您应该设置timestemp手动地
SET LastUpdatedDate=NOW() WHERE
这个想法来自这里: 触摸MYSQL记录以更新TIMESTAMP字段