我有一个表,我们称它为employees,它将数据发送到web服务器,每当发生这种情况时,都会使用current_timestamp更新datetime字段。
现在,当记录更改时,我希望将日期时间字段重置为0001-01-01 : 00:00:00,以便它将再次发送新信息。
能不能做些类似的事
DEFAULT 0001-01-01 00:00:00 ON UPDATE 0001-01-01 00:00:00
而不是
DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
发布于 2016-08-13 11:12:54
on update
只支持current_timestamp
;不允许其他值。请参阅时间戳和日期时间的自动初始化和更新
默认CURRENT_TIMESTAMP和UPDATE CURRENT_TIMESTAMP的使用是特定于时间戳和日期时间的。DEFAULT子句还可用于指定常量(非自动)默认值;例如,默认值0或默认值“2000-01-01:00:00:00”。
您可以使用after update
触发器,但常见的解决方案是使用另一列并在导出时将值设置为current_timestamp
,并将其与最新的更新进行比较:
create table tablename (
...
updated_at datetime(6) default current_timestamp(6)
on update current_timestamp(6),
exported_at datetime(6) default '0001-01-01 00:00:00'
)
若要获取需要导出的所有行,请使用
select * from tablename where exported_at <> updated_at for update;
若要在导出后将某些内容标记为更新,请使用
update tablename set exported_at = current_timestamp(6);
(当然是交易中的所有东西)
由于@ Orbit在轨道上运行,它指出为什么使用datetime(6)
而不是datetime
并不明显:默认情况下,mysql使用datetime
具有第二个精度。这通常不是问题--但对于检测更改的应用程序来说,它将错过在导出后1秒内应用的更新,因此与“在每次更新时将列重置为标记该更新的值”的效果略有不同。这只适用于mysql 5.6.4和更高版本。在此之前,如果需要精确性,请使用触发器。
https://stackoverflow.com/questions/38930369
复制相似问题