Set NOW() as Default Value for datetime datatype?
我在表用户中有两列,即
因为该表已经存在并且有现有记录,所以我想使用修改表。我试过使用下面的两段代码,但都不起作用。
1 2 |
它给了我一个错误:
我可以在MySQL中将默认的日期时间值设置为now()吗?
从MySQL5.6.5开始,可以使用带有动态默认值的
1 2 3 4 | CREATE TABLE foo ( creation_time DATETIME DEFAULT CURRENT_TIMESTAMP, modification_time DATETIME ON UPDATE CURRENT_TIMESTAMP ) |
或者甚至结合这两个规则:
1 |
号
参考文献:http://dev.mysql.com/doc/refman/5.7/en/timestamp-initialization.htmlhttp://optimize-this.blogspot.com/2012/04/datetime-default-now-finally-available.html
在5.6.5之前,您需要使用
请参阅:http://dev.mysql.com/doc/refman/5.1/en/create-table.html
如果要防止mysql更新
1 2 3 |
。
我使用触发器作为解决方法,将新插入的日期时间字段设置为now():
1 2 3 |
。
它也应该适用于更新
Johan&Leonardo的答案涉及到转换到时间戳字段。尽管这对于问题中的用例(存储registerdate和lastvisitdate)可能是可以的,但它不是一个通用的解决方案。请参见日期时间与时间戳问题。
我的解决方案
1 2 |
。
尤里卡!!!!
对于那些在MySQL中试图设置默认日期时间值而失去信心的人来说,我完全知道你的感受。这里是:
1 | `ALTER TABLE `table_name` CHANGE `column_name` DATETIME NOT NULL DEFAULT 0 |
仔细观察,我没有在0附近添加单引号/双引号。
重要更新:
这个答案很早就贴出来了。当时,它在我(可能是最新的)MySQL安装中起作用,我想分享它。在决定现在使用此解决方案之前,请阅读下面的注释。
MySQL5.6文档说当前的时间戳可以作为时间戳和日期时间数据类型的默认值:
http://dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html
在MySQL5.6.5及更高版本上,您可以使用精确的日期时间并设置默认值。不过,还有一点很微妙,那就是将精度值传递给datetime和now()函数调用。
此示例有效:
。
此示例不起作用:
号
最好的方法是使用"默认0"。其他方式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | /************ ROLE ************/ drop table if exists `role`; create table `role` ( `id_role` bigint(20) unsigned not null auto_increment, `date_created` datetime, `date_deleted` datetime, `name` varchar(35) not null, `description` text, primary key (`id_role`) ) comment=''; drop trigger if exists `role_date_created`; create trigger `role_date_created` before insert on `role` for each row set new.`date_created` = now(); |
1 2 3 | `ALTER TABLE `table_name` CHANGE `column_name` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP |
可用于在更新时更新时间戳。
1 2 |
号
最后,这对我有用!
这对我很有用,使用mysql:
号
这对我很有效-刚将insert更改为update for my table。
。
不确定这是否仍然是活动的,但这里是。
关于将默认值设置为now(),我认为对于datetime数据类型来说,这是不可能的。如果要使用该数据类型,请按如下方式设置执行插入操作的日期:
。
我的MySQL版本是5.5