Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

เช็คว่า MySQL Table ถูก Update เมื่อไหร่ล่าสุด (UPDATE_TIME)

ใช้คอลัมน์ 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

  1. Trigger + Audit Table: บันทึก Timestamp เองทุก INSERT/UPDATE/DELETE
  2. Generated Column + Index: updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
  3. Binary Log / CDC: ใช้ Debezium, Maxwell สำหรับ Track Changes จริง
แนะนำ: เพิ่ม Column updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ในทุกตาราง → Query ได้แม่นยำ ไม่พึ่ง Engine-Specific Behavior