4

当我有一个包含以下数据的表时:

StatementID(int AI) | created_by(int) | changed_when(onUpdate CURRENT_TIMESTAMP)
--------------------------------------------------------------------------------
7                   | 4               | 2013-02-26 12:05:57  
8                   | 4               | 2013-02-26 12:20:12

我有以下查询:

mysql_query('
  UPDATE table 
  SET created_by = 4 
  WHERE statementID=8');

当我编辑语句 info(other tbl) 并且它由与上次相同的用户编辑时,changed_when 不会更新。

当我使用相同的数据更新时,为什么该字段changed_when不会改变created_by

4

2 回答 2

8

此行为是设计使然。onUpdate CURRENT_TIMESTAMP 字段在字段值更改时更新,而不是在它们保持不变时更新。

为了实现你想要的,你可以做

UPDATE table 
SET created_by = 4,
changed_when = null,
WHERE statementID = 8
于 2013-02-26T11:40:05.617 回答
6

如果在任何更新语句中,如果值保持不变,则时间戳值将不会被更新。

来自 Mysql 站点

如果该列是自动更新的,则当该行中任何其他列的值从其当前值更改时,它会自动更新为当前时间戳。The column remains unchanged if all other columns are set to their current values. 为了防止该列在其他列更改时更新,请将其显式设置为其当前值。

解决方案

To update the column even when other columns do not change, explicitly set it to the value it should have (for example, set it to CURRENT_TIMESTAMP).

参考

于 2013-02-26T11:40:59.033 回答