首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向MySQL添加一列以记录条目的创建日期

问向MySQL添加一列以记录条目的创建日期
EN

Stack Overflow用户
提问于 2014-05-29 02:49:59
回答 3查看 93关注 0票数 1

我正在设置一个数据库,并想记录每个条目是何时添加的,仅日期。

代码语言:javascript
复制
ALTER TABLE form ADD COLUMN created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP

我正在使用上面的代码,但它也存储了我不想要的时间。有一个单独的日期选项,但我不知道如何让它像上面那样自动输入。

有人碰巧知道这个查询吗?我试过了:

代码语言:javascript
复制
ALTER TABLE form ADD COLUMN created DATE NOT NULL DEFAULT CURDATE

但它不喜欢这样,我也没有找到任何其他的命令来尝试。

EN

回答 3

Stack Overflow用户

发布于 2014-05-29 03:11:49

不,只有CURRENT_TIMESTAMP可以工作。也就是说,您可以使用DATE函数轻松地提取此列的日期部分:

代码语言:javascript
复制
SELECT
    DATE(created) as created_date
FROM
    form;

这里是MySQL manual的相关部分

DEFAULT子句指定列的默认值。除了一个例外,默认值必须是常量;它不能是函数或表达式。例如,这意味着您不能将日期列的默认值设置为NOW()或CURRENT_DATE等函数的值。例外情况是,您可以将CURRENT_TIMESTAMP指定为时间戳或(从MySQL 5.6.5开始) DATETIME列的缺省值。

票数 1
EN

Stack Overflow用户

发布于 2014-05-29 03:21:44

如果考虑到触发器,则此触发器应该可以:

代码语言:javascript
复制
CREATE trigger def_date before INSERT ON form
FOR each
ROW SET NEW.date = CURDATE( ) 
票数 1
EN

Stack Overflow用户

发布于 2014-05-29 03:12:55

由于您不能将函数/表达式用作default,所以第二个ALTER语句不起作用。来自MySQL documentation CREATE TABLE

DEFAULT子句指定列的默认值。除了一个例外,默认值必须是常量;它不能是函数或表达式。例如,这意味着您不能将日期列的默认值设置为NOW()或CURRENT_DATE等函数的值。例外情况是,您可以将CURRENT_TIMESTAMP指定为时间戳列的缺省值

因此,从本质上讲,您只能使用CURRENT_TIMESTAMP作为默认设置。

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

https://stackoverflow.com/questions/23919583

复制
相关文章

相似问题

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