首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >插入的MySQL默认时间戳

问插入的MySQL默认时间戳
EN

Stack Overflow用户
提问于 2021-06-21 17:07:12
回答 2查看 31关注 0票数 0

我有一个表X,它包含1个默认列,用于记录数据插入的时间:

代码语言:javascript
复制
`a` int,
`b` varchar(10),
`audit_create` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) 

然后使用计划事件每1分钟运行一次以下语句:

代码语言:javascript
复制
insert into X (a, b) 
select ....

语句tables的执行大约需要20秒,所以我假设audit_create列应该是这样的:

代码语言:javascript
复制
`2021-06-21 00:00:20.xxx`
`2021-06-21 00:01:21.xxx`
`2021-06-21 00:02:20.xxx`

但是,当每次执行开始运行时,此列的值看起来就像是:

代码语言:javascript
复制
  `2021-06-21 00:00:00.804`
  `2021-06-21 00:01:00.804`
  `2021-06-21 00:02:00.804`

为什么默认时间值等于语句开始时,而不是结果准备好时?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-06-21 17:46:17

NOW()及其所有别名(包括CURRENT_TIMESTAMP)返回一个常量时间,指示语句开始执行的时间。从设计上讲,是不可纠正的。

有SYSDATE()函数可以返回调用时的时间,但不能作为TIMESTAMP列的默认值。必须在INSERT/UPDATE语句中显式使用它:

代码语言:javascript
复制
insert into X (a, b, audit_create) 
select aa, bb, SYSDATE(3) FROM ...

DEMO

票数 0
EN

Stack Overflow用户

发布于 2021-06-21 17:38:53

我认为该值是在准备语句时设置的,而不是在执行insert语句时设置的。如果您想要来自执行时间的时间戳,则必须明确指出这一点。如下所示

代码语言:javascript
复制
insert into X (a, b, audit_create ) 
select valueA, ValueB, Now() from ....

我曾经遇到过类似的情况,但不幸的是,我想不起来我在哪里读到了原因。

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

https://stackoverflow.com/questions/68065275

复制
相关文章

相似问题

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