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

วิธีรายการตารางที่ไม่ว่างเปล่าในทุก Database ของ MySQL

การใช้ INFORMATION_SCHEMA.TABLES

เพื่อดูรายการตารางที่มีข้อมูล (Non-empty tables) ทั้งหมดในทุก Database ให้สอบถามจาก INFORMATION_SCHEMA.TABLES โดยกรองเฉพาะตารางที่มี TABLE_ROWS >= 1

คำสั่ง SQL

SELECT TABLE_SCHEMA, TABLE_NAME, TABLE_ROWS, TABLE_TYPE
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_ROWS >= 1 
  AND TABLE_TYPE = 'BASE TABLE'
ORDER BY TABLE_SCHEMA, TABLE_ROWS DESC;

คอลัมน์ที่สำคัญ

คอลัมน์ความหมาย
TABLE_SCHEMAชื่อ Database
TABLE_NAMEชื่อตาราง
TABLE_ROWSจำนวนแถวประมาณ (Exact สำหรับ MyISAM, ประมาณสำหรับ InnoDB)
TABLE_TYPEBASE TABLE (ตารางทั่วไป) หรือ VIEW
ENGINEStorage Engine (InnoDB, MyISAM, etc.)
DATA_LENGTHขนาดข้อมูล (Bytes)
INDEX_LENGTHขนาดดัชนี (Bytes)

ตัวอย่างผลลัพธ์ (ย่อ)

DatabaseTable NameRowsType
teststudent4BASE TABLE
testemployeeinformation6BASE TABLE
testproduct12BASE TABLE
mysqluser4BASE TABLE
performance_schemaevents_waits_current0BASE TABLE

ข้อควรระวัง

  • ⚠️ TABLE_ROWS ของ InnoDB เป็นค่าประมาณ (Estimation) อาจไม่แม่นยำ 100%
  • 🔍 สำหรับนับแถวที่แน่นอน ใช้ SELECT COUNT(*) FROM table_name
  • 📊 ตาราง System (mysql, performance_schema, information_schema, sys) ก็จะแสดงในผลลัพธ์
  • 🚫 TABLE_TYPE = 'VIEW' จะมี TABLE_ROWS = 0 เสมอ (Views ไม่เก็บข้อมูล)

คำสั่งแบบสมบูรณ์พร้อมขนาด

SELECT 
    TABLE_SCHEMA AS `Database`,
    TABLE_NAME AS `Table`,
    TABLE_ROWS AS `Rows`,
    ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024, 2) AS `Size (MB)`,
    ENGINE
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_ROWS > 0 
  AND TABLE_TYPE = 'BASE TABLE'
ORDER BY (DATA_LENGTH + INDEX_LENGTH) DESC;