在mysql中,我有timestamp
,字段名称为added_on
。我创建了一个crm的潜在客户表。但每当我更新潜在客户时它都会更新。我只希望时间戳只显示增加的时间。我不希望每当我更新或改变领导时都会更新。
注意:在创建时间戳字段时,我将默认值设为时间戳,并在创建字段后在extras字段中显示ON UPDATE CURRENT_TIMESTAMP
。
每当我更新行时,是否有任何停止更新时间戳的想法?
答案 0 :(得分:14)
问题是ON UPDATE CURRENT_TIMESTAMP
。您应能够使用这样的alter语句撤消此行为(不确定您的表名是什么):
ALTER TABLE leads MODIFY added_on TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
答案 1 :(得分:4)
如果您想控制时间戳,只需将其更改为DATETIME,然后在您想要added_on=NOW()
时自行更新
这是我为避免复杂化所做的工作,然后您可以确定您可以完全控制它,这对于在表之间存档或移动数据也很有用,因为在这种情况下您不希望时间戳更新自身
答案 2 :(得分:2)
您在列中添加了ON UPDATE
条件!!
要删除它,请将列重新定义为
ALTER TABLE `mytable` MODIFY `added_on` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;
这将有效消除ON UPDATE
条件。
答案 3 :(得分:1)
表的第一个TIMESTAMP,默认情况下为ON UPDATE CURRENT_TIMESTAMP。为了防止这种情况(而不是之后改变表格),请参阅MySQL文档here:
TIMESTAMP和DATETIME列没有自动属性,除非 它们是显式指定的,但有以下例外:默认情况下, 第一个TIMESTAMP列同时具有DEFAULT CURRENT_TIMESTAMP和ON 如果两者都没有明确指定,则更新CURRENT_TIMESTAMP。至 抑制第一个TIMESTAMP列的自动属性,使用一个 这些策略:
1)启用explicit_defaults_for_timestamp系统变量。如果这 变量已启用,DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP子句指定自动初始化和 更新可用,但未分配给任何TIMESTAMP列 除非明确包含在列定义中。
2)或者,如果禁用explicit_defaults_for_timestamp( 默认),执行以下任一操作:
2a)使用指定常量的DEFAULT子句定义列 默认值。
2b)指定NULL属性。这也会导致列允许NULL 值,表示您无法分配当前时间戳 将列设置为NULL。分配NULL会将列设置为NULL。