MySQL自动添加系统时间

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操作时的时间

例如:创建表名时指定创建时间和修改时间字段:

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> 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> 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> 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表示注释,可以知道此字段作用

猜你喜欢

转载自blog.csdn.net/qq_32262243/article/details/131825792