Loading... **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两种,使用情况分别如下: * CURRENT\_TIMESTAMP:当要向数据库执行insert操作时,如果有个timestamp字段属性设为CURRENT\_TIMESTAMP,则无论这个字段有没有set值都插入当前系统时间 * ON UPDATE CURRENT\_TIMESTAMP:当执行update操作时,并且字段有ON UPDATE CURRENT\_TIMESTAMP属性。则字段无论值有没有变化,他的值也会跟着更新为当前UPDATE操作时的时间 例如:创建表名时指定创建时间和修改时间字段: ```mysql 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,如下所示: ```mysql mysql> DESC example; +----------+--------------+------+-----+-------------------+-----------------------------------------------+ | Field | Type | Null | Key | Default | Extra | +----------+--------------+------+-----+-------------------+-----------------------------------------------+ | id | int unsigned | NO | PRI | NULL | auto_increment | | name | varchar(100) | NO | | | | | age | int | NO | | NULL | | | created | timestamp | NO | | CURRENT_TIMESTAMP | DEFAULT_GENERATED | | modified | timestamp | NO | | CURRENT_TIMESTAMP | DEFAULT_GENERATED on update CURRENT_TIMESTAMP | +----------+--------------+------+-----+-------------------+-----------------------------------------------+ 5 rows in set (0.00 sec) ``` 执行命令插入数据,观察创建和修改时间,都为当前操作时间,如下所示: ```mysql mysql> INSERT INTO example (name,age) values ("jerry",25); Query OK, 1 row affected (0.01 sec) mysql> SELECT * FROM example; +----+-------+-----+---------------------+---------------------+ | id | name | age | created | modified | +----+-------+-----+---------------------+---------------------+ | 1 | kim | 18 | 2023-07-18 14:11:31 | 2023-07-18 14:12:33 | | 2 | jerry | 25 | 2023-07-18 14:33:06 | 2023-07-18 14:33:06 | +----+-------+-----+---------------------+---------------------+ 2 rows in set (0.00 sec) ``` 执行更新命令后,再次查看修改时间,如下所示: ```mysql mysql> UPDATE example SET age=18 WHERE id=1; Query OK, 0 rows affected (0.00 sec) Rows matched: 1 Changed: 0 Warnings: 0 mysql> SELECT * FROM example; +----+-------+-----+---------------------+---------------------+ | id | name | age | created | modified | +----+-------+-----+---------------------+---------------------+ | 1 | kim | 18 | 2023-07-18 14:11:31 | 2023-07-18 14:12:33 | | 2 | jerry | 25 | 2023-07-18 14:33:06 | 2023-07-18 14:33:06 | +----+-------+-----+---------------------+---------------------+ 2 rows in set (0.00 sec) ``` 总结:字段的默认值设置CURRENT\_TIMESTAMP的时候,添加新内容的时候,对应的时间会填充为当前时间,但是修改的时候时间保持不变,如果默认值设置为CURRENT\_TIMESTAMP ON UPDATE CURRENT\_TIMESTAMP,添加新内容的时候,对应的时间会填充为当前时间,修改的时候,时间也会刷新为当前修改的时间 注意:上述创建表的字段类型从timestamp改为datetime也是可以的,COMMENT表示注释,可以知道此字段作用 最后修改:2023 年 07 月 19 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 -