在我的页脚,我想添加一些东西,如“上次更新xx/xx/200x”,这个日期是最后一次某个mySQL表已更新。
最好的方法是什么?是否有检索最近更新日期的函数?每次需要这个值时,我都应该访问数据库吗?
在我的页脚,我想添加一些东西,如“上次更新xx/xx/200x”,这个日期是最后一次某个mySQL表已更新。
最好的方法是什么?是否有检索最近更新日期的函数?每次需要这个值时,我都应该访问数据库吗?
当前回答
如果您正在运行Linux,您可以使用inotify来查看表或数据库目录。inotify可以从PHP, node.js, perl和大多数其他语言中获得。当然,你必须安装inotify或让你的ISP安装它。很多ISP不会这么做。
其他回答
如果您正在运行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没有。
只需从文件系统中获取修改过的文件日期。用我的语言来说就是:
tbl_updated = file.update_time(
"C:\ProgramData\MySQL\MySQL Server 5.5\data\mydb\person.frm")
输出:
1/25/2013 06:04:10 AM
和其他人一样,但是我使用了一些条件,以节省时间:
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;
我没有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的最后一次更新时间。