在我的页脚,我想添加一些东西,如“上次更新xx/xx/200x”,这个日期是最后一次某个mySQL表已更新。
最好的方法是什么?是否有检索最近更新日期的函数?每次需要这个值时,我都应该访问数据库吗?
在我的页脚,我想添加一些东西,如“上次更新xx/xx/200x”,这个日期是最后一次某个mySQL表已更新。
最好的方法是什么?是否有检索最近更新日期的函数?每次需要这个值时,我都应该访问数据库吗?
当前回答
只需从文件系统中获取修改过的文件日期。用我的语言来说就是:
tbl_updated = file.update_time(
"C:\ProgramData\MySQL\MySQL Server 5.5\data\mydb\person.frm")
输出:
1/25/2013 06:04:10 AM
其他回答
如果您正在运行Linux,您可以使用inotify来查看表或数据库目录。inotify可以从PHP, node.js, perl和大多数其他语言中获得。当然,你必须安装inotify或让你的ISP安装它。很多ISP不会这么做。
不知道你会不会对这个感兴趣。在mysql和客户端之间使用mysqlproxy,并使用lua脚本根据有趣的表变化更新memcached中的键值update,DELETE,INSERT是我最近做的解决方案。如果包装器支持php中的钩子或触发器,这可能会更容易。到目前为止,没有一个包装器这样做。
我在phpMyAdmin中按名称做了一个列:update-at,并在我的代码(nodejs)中从Date()方法获得当前时间。表中的每一个变化,这一列都保存变化的时间。
我很惊讶没有人建议跟踪每行最后更新时间:
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没有。
对于最近的表更改列表,使用这个:
SELECT UPDATE_TIME, TABLE_SCHEMA, TABLE_NAME
FROM information_schema.tables
ORDER BY UPDATE_TIME DESC, TABLE_SCHEMA, TABLE_NAME