MySQL 查询表的末次更新时间update_time

版权声明:本文为博主原创文章,转载请注明出处 https://blog.csdn.net/vkingnew/article/details/83857169
背景:
运行环境:MySQL5.7 MySQL8.0
在生产环境上经常需要判断一个条记录是否更新,或者查看整个表的是否有数据更新。
按照行数据的末次更新需求:根据末次更新时间来做数据的增量更新;
根据库的数据更新需求:某些临时存放的表,删除过期保存的表。

针对行数据的末次更新:
1.可以使用MySQL自身的语法支持设置为此时间随着字段update、insert一起更新
此方法较为通用。

2.使用MySQL的触发器。


针对数据库表的更新:
若是InnoDB可以查看information_schema.tables 表进行查看,但是有部分表的update_time没有信息是NULL。


SELECT t.TABLE_SCHEMA, t.TABLE_NAME,t.CREATE_TIME,t.UPDATE_TIME FROM information_schema.TABLES t WHERE t.TABLE_SCHEMA ='temp';

--查询最近三个月没有数据变更的表:

SELECT t.TABLE_SCHEMA, t.TABLE_NAME,t.CREATE_TIME,t.UPDATE_TIME FROM information_schema.TABLES t WHERE t.TABLE_SCHEMA ='tempdb'
AND GREATEST(IFNULL(t.UPDATE_TIME,t.CREATE_TIME),t.CREATE_TIME) < DATE_SUB(NOW(),INTERVAL 3 MONTH);

由于部分表创建的时候没有更新时间,使用MySQL官方的提供的函数ifnull,若update_time 为NULL 则取create_time 的时间。


--上述示例:
--创建表:
mysql> create table t(id int not null auto_increment primary key,cityname varchar(20),createtime datetime not null default CURRENT_TIMESTAMP,LastModifyTime  datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '末次更新时间');
--查看表的定义:
mysql> show create table t\G
*************************** 1. row ***************************
       Table: t
Create Table: CREATE TABLE `t` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `cityname` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `createtime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `LastModifyTime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '末次更新时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
1 row in set (0.00 sec)

--插入数据查看:
mysql> insert into t(id,cityname)values(1,'wuhan');
Query OK, 1 row affected (0.00 sec)

mysql> select * from t;
+----+----------+---------------------+---------------------+
| id | cityname | createtime          | LastModifyTime      |
+----+----------+---------------------+---------------------+
|  1 | wuhan    | 2018-11-08 10:21:33 | 2018-11-08 10:21:33 |
+----+----------+---------------------+---------------------+
1 row in set (0.01 sec)

mysql> update t set cityname='shanghai' where id=1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from t;
+----+----------+---------------------+---------------------+
| id | cityname | createtime          | LastModifyTime      |
+----+----------+---------------------+---------------------+
|  1 | shanghai | 2018-11-08 10:21:33 | 2018-11-08 10:22:10 |
+----+----------+---------------------+---------------------+
1 row in set (0.00 sec)


--查看表的createtime、update_time:

mysql> SELECT t.TABLE_SCHEMA, t.TABLE_NAME,t.CREATE_TIME,t.UPDATE_TIME FROM information_schema.TABLES t WHERE t.TABLE_SCHEMA=database();
+--------------+----------------------+---------------------+---------------------+
| TABLE_SCHEMA | TABLE_NAME           | CREATE_TIME         | UPDATE_TIME         |
+--------------+----------------------+---------------------+---------------------+
| test         | sys_menu             | 2018-06-07 18:17:26 | NULL                |
| test         | sys_role             | 2018-06-07 18:17:20 | NULL                |
| test         | sys_user             | 2018-06-07 18:17:15 | 2018-11-08 10:27:49 |
| test         | t                    | 2018-11-08 10:20:59 | 2018-11-08 10:22:10 |
+--------------+----------------------+---------------------+---------------------+

猜你喜欢

转载自blog.csdn.net/vkingnew/article/details/83857169