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

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


当前回答

在MySQL的新版本中,你可以使用information_schema数据库来告诉你什么时候另一个表被更新了:

SELECT UPDATE_TIME
FROM   information_schema.tables
WHERE  TABLE_SCHEMA = 'dbname'
   AND TABLE_NAME = 'tabname'

这当然意味着打开到数据库的连接。


另一种选择是每当MySQL表更新时“触摸”一个特定的文件:

数据库更新:

以O_RDRW模式打开时间戳文件 再次关闭

或者

使用touch(),相当于PHP中的utimes()函数,来更改文件时间戳。

页面显示:

使用stat()读取文件修改时间。

其他回答

我没有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的最后一次更新时间。

这就是我所做的,希望能有所帮助。

<?php
    mysql_connect("localhost", "USER", "PASSWORD") or die(mysql_error());
    mysql_select_db("information_schema") or die(mysql_error());
    $query1 = "SELECT `UPDATE_TIME` FROM `TABLES` WHERE
        `TABLE_SCHEMA` LIKE 'DataBaseName' AND `TABLE_NAME` LIKE 'TableName'";
    $result1 = mysql_query($query1) or die(mysql_error());
    while($row = mysql_fetch_array($result1)) {
        echo "<strong>1r tr.: </strong>".$row['UPDATE_TIME'];
    }
?>

我在phpMyAdmin中按名称做了一个列:update-at,并在我的代码(nodejs)中从Date()方法获得当前时间。表中的每一个变化,这一列都保存变化的时间。

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

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;

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';