我在表用户中有两列,即registerDate和lastVisitDate,它们由datetime数据类型组成。我想做以下事情。
将registerDate的默认值设置为MySQL NOW()
将lastVisitDate的默认值设置为0000-00-00 00:00:00,而不是默认使用的null。
因为该表已经存在,并且有已有的记录,所以我想使用修改表。我尝试使用下面的两段代码,但都不起作用。
ALTER TABLE users MODIFY registerDate datetime DEFAULT NOW()
ALTER TABLE users MODIFY registerDate datetime DEFAULT CURRENT_TIMESTAMP;
它给我错误:错误1067(42000):无效的默认值为'registerDate'
我是否可以在MySQL中设置默认的日期时间值为NOW() ?
从MySQL 5.6.5开始,你可以使用动态缺省值的DATETIME类型:
CREATE TABLE foo (
creation_time DATETIME DEFAULT CURRENT_TIMESTAMP,
modification_time DATETIME ON UPDATE CURRENT_TIMESTAMP
)
或者甚至将这两个规则结合起来:
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字段。
CREATE TABLE mytable (
mydate TIMESTAMP
)
参见:http://dev.mysql.com/doc/refman/5.1/en/create-table.html
如果你想阻止MySQL在UPDATE上更新时间戳值(这样它只在INSERT上触发),你可以将定义更改为:
CREATE TABLE mytable (
mydate TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
最好的方法是使用“DEFAULT 0”。
其他方式:
/************ 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();