![](/img/trans.png)
[英]Writing into cassandra 0001-01-01 00:00:00.0. changed into 0001-01-01 10:30: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.