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

MySQL 查询表的末次更新时间update_time背景 运行环境 MySQL5 7 MySQL8 0 在生产环境上经常需要判断一个条记录是否更新 或者查看整个表的是否有数据更新 按照行数据的末次更新需求 根据末次更新时间来做数据的增量更新 根据库的数据更新需求 某些临时存放的表 删除过期保存的表

大家好,我是讯享网,很高兴认识大家。
背景: 运行环境: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 | +--------------+----------------------+---------------------+---------------------+ 

讯享网

 


讯享网

小讯
上一篇 2025-01-26 13:38
下一篇 2025-04-01 21:16

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/43192.html