首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >是否将NOW()设置为datetime数据类型的默认值?

是否将NOW()设置为datetime数据类型的默认值?
EN

Stack Overflow用户
提问于 2011-04-28 20:14:04
回答 13查看 489.1K关注 0票数 209

我在表users中有两列,即registerDate and lastVisitDate,它们由datetime数据类型组成。我想做以下几件事。

  1. 将registerDate默认值设置为MySQL NOW()
  2. 将lastVisitDate默认值设置为0000-00-00 00:00:00,而不是默认使用的null。

因为表已经存在并且已经有记录,所以我想使用Modify table。我试过使用下面的两段代码,但都不起作用。

代码语言:javascript
复制
ALTER TABLE users MODIFY registerDate datetime DEFAULT NOW()
ALTER TABLE users MODIFY registerDate datetime DEFAULT CURRENT_TIMESTAMP;

它给出了错误:ERROR 1067 (42000): Invalid default value for 'registerDate'

是否可以在MySQL中将默认日期时间值设置为NOW()?

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2011-04-28 20:16:52

从MySQL 5.6.5开始,您可以使用带有动态默认值的DATETIME类型:

代码语言:javascript
复制
CREATE TABLE foo (
    creation_time      DATETIME DEFAULT   CURRENT_TIMESTAMP,
    modification_time  DATETIME ON UPDATE CURRENT_TIMESTAMP
)

或者甚至将这两条规则结合起来:

代码语言:javascript
复制
modification_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

参考资料:

http://dev.mysql.com/doc/refman/5.7/en/timestamp-initialization.html

http://optimize-this.blogspot.com/2012/04/datetime-default-now-finally-available.html

在5.6.5之前,您需要使用TIMESTAMP数据类型,该数据类型会在记录被修改时自动更新。然而,不幸的是,每个表只能存在一个自动更新的TIMESTAMP字段。

代码语言:javascript
复制
CREATE TABLE mytable (
  mydate TIMESTAMP
)

请参阅:http://dev.mysql.com/doc/refman/5.1/en/create-table.html

如果您想要阻止MySQL更新UPDATE上的时间戳值(以便它只在INSERT上触发),您可以将定义更改为:

代码语言:javascript
复制
CREATE TABLE mytable (
  mydate TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
票数 262
EN

Stack Overflow用户

发布于 2013-11-16 19:15:46

我使用触发器作为变通方法,将新插入的datetime字段设置为NOW():

代码语言:javascript
复制
CREATE TRIGGER `triggername` BEFORE INSERT ON  `tablename` 
FOR EACH ROW 
SET NEW.datetimefield = NOW()

它应该也适用于更新

Johan & Leonardo的回答涉及到转换为时间戳字段。虽然这对于问题中给出的用例(存储RegisterDate和LastVisitDate)来说可能没问题,但它不是通用的解决方案。参见datetime vs timestamp问题。

票数 71
EN

Stack Overflow用户

发布于 2012-10-25 08:11:54

我的解决方案

代码语言:javascript
复制
ALTER TABLE `table_name` MODIFY COLUMN `column_name` TIMESTAMP NOT
NULL DEFAULT CURRENT_TIMESTAMP;
票数 46
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5818423

复制
相关文章

相似问题

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