在我的页脚,我想添加一些东西,如“上次更新xx/xx/200x”,这个日期是最后一次某个mySQL表已更新。
最好的方法是什么?是否有检索最近更新日期的函数?每次需要这个值时,我都应该访问数据库吗?
在我的页脚,我想添加一些东西,如“上次更新xx/xx/200x”,这个日期是最后一次某个mySQL表已更新。
最好的方法是什么?是否有检索最近更新日期的函数?每次需要这个值时,我都应该访问数据库吗?
当前回答
a)它会显示你所有的表和最近的更新日期
SHOW TABLE STATUS FROM db_name;
然后,你可以进一步询问具体的表格:
SHOW TABLE STATUS FROM db_name like 'table_name';
b)在上面的例子中,你不能在'Update_time'上使用排序,但是使用SELECT你可以:
SELECT * FROM information_schema.tables WHERE TABLE_SCHEMA='db_name' ORDER BY UPDATE_TIME DESC;
要进一步询问特定的表:
SELECT * FROM information_schema.tables WHERE TABLE_SCHEMA='db_name' AND table_name='table_name' ORDER BY UPDATE_TIME DESC';
其他回答
最简单的方法是检查磁盘上表文件的时间戳。例如,您可以在数据目录下检查
cd /var/lib/mysql/<mydatabase>
ls -lhtr *.ibd
这将为您提供所有表的列表,其中的表是最后一次修改该表的时间、最早的时间。
a)它会显示你所有的表和最近的更新日期
SHOW TABLE STATUS FROM db_name;
然后,你可以进一步询问具体的表格:
SHOW TABLE STATUS FROM db_name like 'table_name';
b)在上面的例子中,你不能在'Update_time'上使用排序,但是使用SELECT你可以:
SELECT * FROM information_schema.tables WHERE TABLE_SCHEMA='db_name' ORDER BY UPDATE_TIME DESC;
要进一步询问特定的表:
SELECT * FROM information_schema.tables WHERE TABLE_SCHEMA='db_name' AND table_name='table_name' ORDER BY UPDATE_TIME DESC';
如果您正在运行Linux,您可以使用inotify来查看表或数据库目录。inotify可以从PHP, node.js, perl和大多数其他语言中获得。当然,你必须安装inotify或让你的ISP安装它。很多ISP不会这么做。
当查询不可用时,将查询缓存在全局变量中。
创建一个网页,在更新缓存时强制重新加载缓存。
将对重新加载页面的调用添加到部署脚本中。
我很惊讶没有人建议跟踪每行最后更新时间:
mysql> CREATE TABLE foo (
id INT PRIMARY KEY
x INT,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP,
KEY (updated_at)
);
mysql> INSERT INTO foo VALUES (1, NOW() - INTERVAL 3 DAY), (2, NOW());
mysql> SELECT * FROM foo;
+----+------+---------------------+
| id | x | updated_at |
+----+------+---------------------+
| 1 | NULL | 2013-08-18 03:26:28 |
| 2 | NULL | 2013-08-21 03:26:28 |
+----+------+---------------------+
mysql> UPDATE foo SET x = 1234 WHERE id = 1;
这将更新时间戳,尽管我们没有在UPDATE中提到它。
mysql> SELECT * FROM foo;
+----+------+---------------------+
| id | x | updated_at |
+----+------+---------------------+
| 1 | 1235 | 2013-08-21 03:30:20 | <-- this row has been updated
| 2 | NULL | 2013-08-21 03:26:28 |
+----+------+---------------------+
现在你可以查询MAX():
mysql> SELECT MAX(updated_at) FROM foo;
+---------------------+
| MAX(updated_at) |
+---------------------+
| 2013-08-21 03:30:20 |
+---------------------+
不可否认,这需要更多的存储空间(TIMESTAMP每行4字节)。 但这适用于MySQL 5.7.15版本之前的InnoDB表,其中INFORMATION_SCHEMA.TABLES。UPDATE_TIME没有。