Je suis surpris que personne n'a suggéré le suivi de la dernière fois la mise à jour par ligne:
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;
Cette met à jour l'horodatage même si nous n'avons pas mentionné dans le 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 |
+----+------+---------------------+
Maintenant, vous pouvez interroger le MAX():
mysql> SELECT MAX(updated_at) FROM foo;
+---------------------+
| MAX(updated_at) |
+---------------------+
| 2013-08-21 03:30:20 |
+---------------------+
Certes, cela nécessite plus de stockage (4 octets par ligne pour timestamp).
Mais cela fonctionne pour les tables InnoDB avant la version 5.7.15 de MySQL, ce qui n'est pas le cas pour INFORMATION_SCHEMA.TABLES.UPDATE_TIME
.
Connexes: http://stackoverflow.com/questions/12563706/-there-a-mysql-option-feature-pour-track-history-of-changes-to-records –