首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >mysql日期时间默认为0001-01-01 : 00:00:00 :00:00

mysql日期时间默认为0001-01-01 : 00:00:00 :00:00
EN

Stack Overflow用户
提问于 2016-08-13 07:30:32
回答 1查看 2.1K关注 0票数 0

我有一个表,我们称它为employees,它将数据发送到web服务器,每当发生这种情况时,都会使用current_timestamp更新datetime字段。

现在,当记录更改时,我希望将日期时间字段重置为0001-01-01 : 00:00:00,以便它将再次发送新信息。

能不能做些类似的事

代码语言:javascript
运行
复制
DEFAULT 0001-01-01 00:00:00 ON UPDATE 0001-01-01 00:00:00

而不是

代码语言:javascript
运行
复制
DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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,并将其与最新的更新进行比较:

代码语言:javascript
运行
复制
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'
)

若要获取需要导出的所有行,请使用

代码语言:javascript
运行
复制
select * from tablename where exported_at <> updated_at for update;

若要在导出后将某些内容标记为更新,请使用

代码语言:javascript
运行
复制
update tablename set exported_at = current_timestamp(6);

(当然是交易中的所有东西)

由于@ Orbit在轨道上运行,它指出为什么使用datetime(6)而不是datetime并不明显:默认情况下,mysql使用datetime具有第二个精度。这通常不是问题--但对于检测更改的应用程序来说,它将错过在导出后1秒内应用的更新,因此与“在每次更新时将列重置为标记该更新的值”的效果略有不同。这只适用于mysql 5.6.4和更高版本。在此之前,如果需要精确性,请使用触发器。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38930369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档