繁体   English   中英

mysql datetime默认值0001-01-01 00:00:00更新于0001-01-01 00:00:00

[英]mysql datetime default 0001-01-01 00:00:00 on update 0001-01-01 00:00:00

我有一个表,我们称其为雇员,该表将数据发送到Web服务器,只要发生这种情况,datetime字段就会用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

on update仅支持current_timestamp ; 不允许其他值。 请参阅TIMESTAMP和DATETIME的自动初始化和更新

DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP的使用特定于TIMESTAMP和DATETIME。 DEFAULT子句还可以用于指定一个常量(非自动)默认值;例如: 例如DEFAULT 0或DEFAULT'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中的@Lightness Races指出为什么使用datetime(6)代替datetime并不明显:默认情况下,mysql使用具有第二精度的datetime 通常这不是问题,但是对于这种检测更改的应用程序,它将丢失在导出后1秒钟内应用的更新,因此,其效果与“将每次更新的列重置为一个标记该值的值”略有不同。更新”。 这仅适用于mysql 5.6.4及更高版本。 在此之前,如果需要该精度,请使用触发器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM