MySQL时间类型有以下几种:
- DATE类型:存储年月日
- TIME类型:存储时分秒
- DATETIME类型:存储YYYY-MM-DD HH:MM:SS
- TIMESTAMP类型:存储YYYYMMDDHHMMSS
在使用mysql数据库时,常用的类型就是date和datetime
datetime和timestamp有什么区别?
- 都可以用来存储:年月日时分秒,两者都可以精确到毫秒,比如:datetime(3)、timestamp(3),就是精确到三位毫秒值
- timestamp更适合跨时区的业务,mysql5.6.4之后的版本,可以精确到毫秒,并且可以指定
mysql的时间类型有两个属性,分别是CURRENT_TIMESTAMP 和ON UPDATE CURRENT_TIMESTAMP两种,使用情况分别如下:
1、CURRENT_TIMESTAMP:
当要向数据库执行insert操作时,如果有个timestamp字段属性设为CURRENT_TIMESTAMP,则无论这个字段有没有set值都插入当前系统时间
2、ON UPDATE CURRENT_TIMESTAMP
当执行update操作时,并且字段有ON UPDATE CURRENT_TIMESTAMP属性。则字段无论值有没有变化,他的值也会跟着更新为当前UPDATE操作时的时间
例如:创建表名时指定创建时间和修改时间字段:
CREATE TABLE `example` (
`id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'ID信息',
`name` varchar(100) NOT NULL DEFAULT "" COMMENT '姓名',
`age` int NOT NULL COMMENT '年龄',
`created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`modified` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
查看表结构,desc example,如图:
执行命令插入数据,观察创建和修改时间,都为当前操作时间,如图:
执行更新命令后,再次查看修改时间,如图:
总结:字段的默认值设置CURRENT_TIMESTAMP的时候,添加新内容的时候,对应的时间会填充为当前时间,但是修改的时候时间保持不变,如果默认值设置为CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,添加新内容的时候,对应的时间会填充为当前时间,修改的时候,时间也会刷新为当前修改的时间
注意:上述创建表的字段类型从timestamp改为datetime也是可以的,COMMENT表示注释,可以知道此字段作用