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

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kim同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值