视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
MySQLdatetime数据类型设置当前时间为默认值
2020-11-09 08:03:43 责编:小采
文档


环境:MySQL Sever 5.1 + MySQL命令行工具 问题:MySQL datetime数据类型设置当前时间为默认值 解决: 方法一: 由于MySQL目前字段的默认值不支持函数,所以以create_time datetime default now() 的形式设置默认值是不可能的。代替的方案是 使用 TIMESTAMP

环境:MySQL Sever 5.1 + MySQL命令行工具


问题:MySQL datetime数据类型设置当前时间为默认值

解决:


方法一:


由于MySQL目前字段的默认值不支持函数,所以以create_time datetime default now() 的形式设置默认值是不可能的。代替的方案是使用TIMESTAMP类型代替DATETIME类型。


TIMESTAMP列类型自动地用当前的日期和时间标记INSERT或UPDATE的操作。如果有多个TIMESTAMP列,只有第一个自动更新。

自动更新第一个TIMESTAMP列在下列任何条件下发生:


1.列值没有明确地在一个INSERT或LOAD DATA INFILE语句中指定。

2.列值没有明确地在一个UPDATE语句中指定且另外一些的列改变值。(注意一个UPDATE设置一个列为它已经有的值,这将不引起TIMESTAMP列被更新,因为如果你设置一个列为它当前的值,MySQL为了效率而忽略更改。)


3.你明确地设定TIMESTAMP列为NULL.


4.除第一个以外的TIMESTAMP列也可以设置到当前的日期和时间,只要将列设为NULL,或NOW()。

所以把日期类型 选择成timestamp 允许空就可以了


CREATE TABLE test ( 
uname varchar(50) NOT NULL, 
updatetime timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

如果要在navicat下操作的话,将字段设置为timestamp,然后默认值写上CURRENT_TIMESTAMP即可

方法二:


在MySQL5.0以上版本中也可以使用trigger来实现此功能。


create table test_time ( 
 idint(11), 
 create_time datetime 
); 
delimiter | 
create trigger default_datetime before insert on test_time 
 foreach row 
 if new.create_time is null then 
 set new.create_time = now(); 
 end if;| 
delimiter ; 

参考资料:


mysql 日期默认系统时间 mysql 默认值不支持函数


MySQL的datetime设置当前时间为默认值


MySQL里如何给日期类型设置默认值


MySQL 字段约束 null,notnull,default,auto_increment

下载本文
显示全文
专题