ใช้ตารางระบบ INFORMATION_SCHEMA.SCHEMATA เพื่อดึงรายชื่อฐานข้อมูล (Database/Schema) ทั้งหมดใน MySQL Server
Syntax
SELECT schema_name AS DatabaseName FROM information_schema.schemata;
ตัวอย่างการใช้งาน
mysql> select schema_name as DatabaseName from information_schema.schemata;
ผลลัพธ์ (ตัวอย่าง):
+---------------------------+ | DatabaseName | +---------------------------+ | mysql | | information_schema | | performance_schema | | sys | | business | | sample | | hello | | test | | mybusiness | | databasesample | | schemasample | | universitydatabase | | education | | mydatabase | | database1 | | sampledatabase | | test3 | | javadatabase2 | | javasampledatabase | | rdb | | onetomanyrelationship | | webtracker | | web | | commandline | | hb_student_tracker | | bothinnodbandmyisam | | customertracker | | tracker | | demo | | customer_tracker_database | | login | | onlinebookstore | | customer-tracker | | web_tracker | | instant_app | | 1233 | +---------------------------+ 36 rows in set (0.00 sec)
คอลัมน์สำคัญใน SCHEMATA
| คอลัมน์ | ความหมาย |
|---|---|
| CATALOG_NAME | ชื่อ Catalog (ปกติเป็น 'def') |
| SCHEMA_NAME | ชื่อฐานข้อมูล (Database Name) |
| DEFAULT_CHARACTER_SET_NAME | Charset เริ่มต้น (utf8mb4, latin1, etc.) |
| DEFAULT_COLLATION_NAME | Collation เริ่มต้น |
| SQL_PATH | Path สำหรับ Stored Routine (ปกติ NULL) |
คำสั่งทางเลือก: SHOW DATABASES
mysql> SHOW DATABASES;
ผลลัพธ์เหมือนกัน แต่ SHOW DATABASES ไม่สามารถ JOIN/WHERE กับตารางอื่นได้ ในขณะที่ INFORMATION_SCHEMA.SCHEMATA เป็นตารางทั่วไป Query ได้ยืดหยุ่น
กรองฐานข้อมูลเฉพาะ User (ไม่รวม System DB)
SELECT schema_name FROM information_schema.schemata
WHERE schema_name NOT IN ('mysql','information_schema','performance_schema','sys','test');
นับจำนวนฐานข้อมูล
SELECT COUNT(*) FROM information_schema.schemata;
สรุป: ใช้ SELECT schema_name FROM information_schema.schemata เพื่อดึงรายชื่อ Database ทั้งหมด แบบ Query ได้ยืดหยุ่น กรอง JOIN ได้ ต่างจาก SHOW DATABASES ที่เป็นคำสั่งเฉพาะ