ฉันประหลาดใจที่ไม่มีใครแนะนำให้ติดตามเวลาอัปเดตล่าสุดต่อแถว:
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;
สิ่งนี้อัปเดตการประทับเวลาแม้ว่าเราจะไม่ได้กล่าวถึงในการอัปเดต
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 |
+---------------------+
เป็นที่ยอมรับว่าต้องใช้พื้นที่เก็บข้อมูลเพิ่มเติม (4 ไบต์ต่อแถวสำหรับ TIMESTAMP)
แต่วิธีนี้ใช้ได้กับตาราง InnoDBก่อน MySQL เวอร์ชัน 5.7.15 ซึ่งINFORMATION_SCHEMA.TABLES.UPDATE_TIME
ไม่ได้