สถานการณ์
ต้องการตรวจสอบว่าตารางชื่อหนึ่งมีอยู่ใน Database ปัจจุบันหรือไม่ และต้องการผลลัพธ์เป็น Boolean (Yes/No) ใน Query เดียว
วิธีแก้: Query INFORMATION_SCHEMA.TABLES
INFORMATION_SCHEMA.TABLES เก็บข้อมูลเมตาของตารางทั้งหมด สามารถ Query ได้เหมือนตารางทั่วไป
ตัวอย่างการใช้งาน
1. สร้างตารางทดสอบ
mysql> CREATE TABLE DemoTable (
-> Id INT,
-> Name VARCHAR(20)
-> );
Query OK, 0 rows affected (1.57 sec)
2. เพิ่มข้อมูล
mysql> INSERT INTO DemoTable VALUES(101, 'Chris'); Query OK, 1 row affected (0.71 sec) mysql> INSERT INTO DemoTable VALUES(102, 'David'); Query OK, 1 row affected (0.20 sec)
3. ตรวจสอบว่าตาราง DemoTable มีอยู่หรือไม่
mysql> SELECT MAX(CASE WHEN table_name = 'DemoTable'
-> THEN 'Yes the table exist(TRUE)'
-> ELSE 'No(FALSE)' END) AS isTableExists
-> FROM information_schema.tables;
ผลลัพธ์:
+-------------------------------+ | isTableExists | +-------------------------------+ | Yes the table exist(TRUE) | +-------------------------------+ 1 row in set (0.52 sec)
อธิบาย Logic
- Query
information_schema.tablesได้รายการตารางทั้งหมด CASE WHEN table_name = 'DemoTable' THEN 'Yes...' ELSE 'No...' END→ แต่ละแถวคืน Yes หรือ NoMAX()รวมเป็น 1 แถว: 'Yes...' > 'No...' (String comparison) → ได้ Yes หากมีตาราง
วิธีอื่นๆ ที่ง่ายกว่า
1. ใช้ COUNT() (แนะนำ)
SELECT COUNT(*) > 0 AS TableExists FROM information_schema.tables WHERE table_schema = DATABASE() AND table_name = 'DemoTable';
2. ใช้ EXISTS (มีประสิทธิภาพดีกว่า)
SELECT EXISTS(
SELECT 1 FROM information_schema.tables
WHERE table_schema = DATABASE() AND table_name = 'DemoTable'
) AS TableExists;
3. ใช้ SHOW TABLES (Client-side)
SHOW TABLES LIKE 'DemoTable';
คอลัมน์สำคัญใน INFORMATION_SCHEMA.TABLES
| Column | คำอธิบาย |
|---|---|
| TABLE_SCHEMA | Database Name |
| TABLE_NAME | Table Name |
| TABLE_TYPE | BASE TABLE / VIEW / SYSTEM VIEW |
| ENGINE | Storage Engine (InnoDB, MyISAM, etc.) |
| TABLE_ROWS | ประมาณจำนวนแถว (InnoDB ไม่แม่นยำ 100%) |
| CREATE_TIME | เวลาสร้าง |
| UPDATE_TIME | เวลาอัปเดตล่าสุด |
กรณีการใช้งานจริง
- Migration Script: ตรวจสอบก่อน Create/Drop Table
- Dynamic SQL: สร้าง Query เหมาะกับ Schema ที่มีอยู่
- Health Check: ตรวจสอบ Table สำคัญครบครัน
- Multi-tenant: ตรวจสอบ Table ของ Tenant แต่ละราย