Cette commande donne la date de la dernière mise à jour d'une table
SELECT UPDATE_TIME
FROM information_schema.tables
WHERE TABLE_SCHEMA = 'MyDB'
AND TABLE_NAME = 'MyTable'
Mais je veux trouver l'heure de la dernière mise à jour d'une colonne particulière d'une table. Je ne peux pas utiliser de déclencheurs car je veux connaître l'heure de la dernière mise à jour d'une colonne spécifique d'une table système.
J'espère avoir bien expliqué mon problème.
Aucune des tables système (c'est-à-dire rien dans la base de données INFORMATION_SCHEMA ) ne contient ce type d'informations enregistrées n'importe où. En d'autres termes, il n'y a pas de mécanisme natif pour mettre des horodatages sur les changements de colonne. Chaque fois que
le UPDATE_TIME
colonne dans INFORMATION_SCHEMA.TABLES
est mis à jour.
Cela peut être une pilule amère à avaler, mais vous devez faire ce qui suit:
BEFORE UPDATE
déclencheur pour comparer les anciennes et les nouvelles colonnes et les enregistrer si elles ne correspondent pasCela peut ne pas être si mauvais si vous personnalisez quelques tables et quelques colonnes.
Vous pouvez modifier votre table afin qu'elle stocke l'horodatage chaque fois qu'elle est mise à jour. Par exemple
CREATE TABLE foo (
id INT PRIMARY KEY
x INT,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP,
KEY (updated_at)
);
Le code ci-dessus stocke l'horodatage actuel sur une nouvelle ligne et le change l'heure éditée chaque fois qu'une ligne est éditée. De cette façon, vous pouvez obtenir les données, les trier (order by
) en mode descending
et obtenir le premier enregistrement. De cette façon, vous obtenez le dernier enregistrement mis à jour dans votre table. Si vous voulez connaître l'ensemble de la base de données, vous devez comparer le dernier enregistrement mis à jour pour chacune de vos tables et obtenir le plus récent.