在我的页脚,我想添加一些东西,如“上次更新xx/xx/200x”,这个日期是最后一次某个mySQL表已更新。

最好的方法是什么?是否有检索最近更新日期的函数?每次需要这个值时,我都应该访问数据库吗?


当前回答

如果您正在运行Linux,您可以使用inotify来查看表或数据库目录。inotify可以从PHP, node.js, perl和大多数其他语言中获得。当然,你必须安装inotify或让你的ISP安装它。很多ISP不会这么做。

其他回答

不知道你会不会对这个感兴趣。在mysql和客户端之间使用mysqlproxy,并使用lua脚本根据有趣的表变化更新memcached中的键值update,DELETE,INSERT是我最近做的解决方案。如果包装器支持php中的钩子或触发器,这可能会更容易。到目前为止,没有一个包装器这样做。

最简单的方法是检查磁盘上表文件的时间戳。例如,您可以在数据目录下检查

cd /var/lib/mysql/<mydatabase>
ls -lhtr *.ibd

这将为您提供所有表的列表,其中的表是最后一次修改该表的时间、最早的时间。

当查询不可用时,将查询缓存在全局变量中。

创建一个网页,在更新缓存时强制重新加载缓存。

将对重新加载页面的调用添加到部署脚本中。

我没有information_schema数据库,使用mysql版本4.1.16,所以在这种情况下,你可以查询这个:

SHOW TABLE STATUS FROM your_database LIKE 'your_table';

它将返回这些列:

| Name      | Engine | Version | Row_format | Rows | Avg_row_length 
| Data_length | Max_data_length | Index_length | Data_free | Auto_increment
| Create_time | Update_time | Check_time | Collation
| Checksum | Create_options | Comment |

如您所见,有一列名为“Update_time”,它显示了your_table的最后一次更新时间。

和其他人一样,但是我使用了一些条件,以节省时间:

SELECT
  UPDATE_TIME,
  TABLE_SCHEMA,
  TABLE_NAME
FROM
  information_schema.tables
WHERE
  1 = 1
  AND UPDATE_TIME > '2021-11-09 00:00:00'
  AND TABLE_SCHEMA = 'db_name_here'
  AND TABLE_NAME not in ('table_name_here',)
ORDER BY
  UPDATE_TIME DESC,
  TABLE_SCHEMA,
  TABLE_NAME;