En el pie de página de mi página, me gustaría agregar algo como "última actualización de xx / xx / 200x", siendo esta fecha la última vez que se ha actualizado una determinada tabla mySQL.
¿Cuál es la mejor manera de hacer eso? ¿Hay una función para recuperar la última fecha actualizada? ¿Debo acceder a la base de datos cada vez que necesito este valor?
Respuestas:
En versiones posteriores de MySQL, puede usar la
information_schema
base de datos para informarle cuándo se actualizó otra tabla:Por supuesto, esto significa abrir una conexión a la base de datos.
Una opción alternativa sería "tocar" un archivo en particular cada vez que se actualiza la tabla MySQL:
En actualizaciones de bases de datos:
O_RDRW
modoclose
de nuevoo alternativamente
touch()
, el equivalente PHP de lautimes()
función, para cambiar la marca de tiempo del archivo.En la página de visualización:
stat()
para volver a leer el tiempo de modificación del archivo.fuente
show table status
usosinformation_schema.tables
)UPDATE_TIME
método como elshow table status
método a continuación están disponibles solo con el motor MyISAM, no con InnoDB. Aunque esto aparece como un error , se menciona en la Referencia de MySQL 5.5 , que también dice que elfile_per_table
modo es un indicador poco confiable del tiempo de modificación.No tengo la base de datos information_schema, usando mysql versión 4.1.16, por lo que en este caso puede consultar esto:
Devolverá estas columnas:
Como puede ver, hay una columna llamada: " Update_time " que le muestra la última hora de actualización para your_table .
fuente
Me sorprende que nadie haya sugerido el seguimiento del último tiempo de actualización por fila:
Esto actualiza la marca de tiempo a pesar de que no lo mencionamos en la ACTUALIZACIÓN.
Ahora puede consultar el MAX ():
Es cierto que esto requiere más almacenamiento (4 bytes por fila para TIMESTAMP).
Pero esto funciona para las tablas InnoDB anteriores a la versión 5.7.15 de MySQL, que
INFORMATION_SCHEMA.TABLES.UPDATE_TIME
no funciona.fuente
Lo más simple sería verificar la marca de tiempo de los archivos de la tabla en el disco. Por ejemplo, puede verificar en su directorio de datos
Esto debería darle la lista de todas las tablas con la tabla cuando se modificó por última vez la primera vez, la primera.
fuente
Para obtener una lista de los cambios recientes en la tabla, use esto:
fuente
UPDATE_TIME
son nulos? ¿Alguna idea?Crearía un desencadenador que capture todas las actualizaciones / inserciones / eliminaciones y escriba una marca de tiempo en una tabla personalizada, algo así como nombre de tabla | marca de tiempo
Solo porque no me gusta la idea de leer las tablas internas del sistema del servidor db directamente
fuente
UPDATE_TIME
columna como en MySQL.Aunque hay una respuesta aceptada, no creo que sea la correcta. Es la forma más simple de lograr lo que se necesita, pero incluso si ya está habilitado en InnoDB (en realidad, los documentos le dicen que aún debe obtener NULL ...), si lee documentos de MySQL , incluso en la versión actual (8.0) usando UPDATE_TIME es no es la opción correcta porque:
Si entiendo correctamente (no puedo verificarlo en un servidor en este momento), la marca de tiempo se restablece después de reiniciar el servidor.
En cuanto a las soluciones reales (y, bueno, costosas), tiene la solución de Bill Karwin con CURRENT_TIMESTAMP y me gustaría proponer una diferente, que se base en desencadenantes (estoy usando esa).
Comienza creando una tabla separada (o tal vez tenga alguna otra tabla que se pueda usar para este propósito) que funcionará como un almacenamiento para variables globales (aquí las marcas de tiempo). Debe almacenar dos campos: nombre de la tabla (o cualquier valor que desee mantener aquí como id de la tabla) y marca de tiempo. Después de tenerlo, debe inicializarlo con este id de tabla + fecha de inicio (NOW () es una buena opción :)).
Ahora, pasa a las tablas que deseas observar y agrega disparadores DESPUÉS DE INSERTAR / ACTUALIZAR / BORRAR con este procedimiento u otro similar:
fuente
Análisis a nivel del sistema operativo:
Encuentre dónde está almacenada la base de datos en el disco:
Verifique las modificaciones más recientes
Debería funcionar en todos los tipos de bases de datos.
fuente
Simplemente tome la fecha del archivo modificado del sistema de archivos. En mi idioma que es:
Salida:
fuente
Si está ejecutando Linux, puede usar inotify para mirar la tabla o el directorio de la base de datos. inotify está disponible en PHP, node.js, perl y sospecho que la mayoría de los otros lenguajes. Por supuesto, debe haber instalado inotify o que su ISP lo haya instalado. Muchos ISP no lo harán.
fuente
No estoy seguro si esto sería de algún interés. El uso de mysqlproxy entre mysql y los clientes, y el uso de un script lua para actualizar un valor clave en memcached de acuerdo con interesantes cambios en la tabla ACTUALIZAR, ELIMINAR, INSERTAR fue la solución que hice bastante recientemente. Si el contenedor admite ganchos o disparadores en php, esto podría haber sido más fácil. Ninguno de los envoltorios a partir de ahora hace esto.
fuente
Hice una columna por nombre: update-at en phpMyAdmin y obtuve la hora actual del método Date () en mi código (nodejs). Con cada cambio en la tabla, esta columna contiene el tiempo de los cambios.
fuente
a) Te mostrará todas las tablas y las últimas fechas de actualización
luego, puede solicitar una tabla específica:
b) Como en los ejemplos anteriores, no puede usar la ordenación en 'Update_time' pero con SELECT puede:
para preguntar más sobre una tabla en particular:
fuente
Esto es lo que hice, espero que ayude.
fuente
Caché la consulta en una variable global cuando no está disponible.
Cree una página web para forzar la recarga de la memoria caché cuando la actualice.
Agregue una llamada a la página de recarga en sus scripts de implementación.
fuente