ใช้คอลัมน์ UPDATE_TIME จาก INFORMATION_SCHEMA.TABLES (ทำงานกับ MyISAM ได้ดี InnoDB ต้องการ innodb_file_per_table=ON)
สร้างตาราง MyISAM (เพื่อทดสอบ)
mysql> CREATE TABLE MyISAMTableDemo (id INT) ENGINE=MYISAM; mysql> INSERT INTO MyISAMTableDemo VALUES (1), (2);
Query ดู UPDATE_TIME
mysql> SELECT UPDATE_TIME
-> FROM INFORMATION_SCHEMA.TABLES
-> WHERE TABLE_SCHEMA = 'business'
-> AND TABLE_NAME = 'MyISAMTableDemo';
+---------------------+ | UPDATE_TIME | +---------------------+ | 2018-11-01 19:00:02 | +---------------------+
ข้อจำกัดกับ InnoDB
- InnoDB (Shared Tablespace / ibdata1):
UPDATE_TIMEเป็น NULL เสมอ - InnoDB (File-per-table +
innodb_file_per_table=ON): มีค่า แต่ Update แบบ Bulk/DDL เท่านั้น (ไม่ใช่ทุก Row Update)
วิธีทางเลือกสำหรับ InnoDB
- Trigger + Audit Table: บันทึก Timestamp เองทุก INSERT/UPDATE/DELETE
- Generated Column + Index:
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP - Binary Log / CDC: ใช้ Debezium, Maxwell สำหรับ Track Changes จริง
แนะนำ: เพิ่ม Column updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ในทุกตาราง → Query ได้แม่นยำ ไม่พึ่ง Engine-Specific Behavior