Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Hiển thị tất cả database và bảng trong MySQL

Truy vấn INFORMATION_SCHEMA

Sử dụng INFORMATION_SCHEMA.SCHEMATA (danh sách database) JOIN INFORMATION_SCHEMA.TABLES (danh sách bảng).

Truy vấn

SELECT
    my_schema.SCHEMA_NAME,
    GROUP_CONCAT(tbl.TABLE_NAME) AS tables
FROM INFORMATION_SCHEMA.SCHEMATA my_schema
LEFT JOIN INFORMATION_SCHEMA.TABLES tbl
    ON my_schema.SCHEMA_NAME = tbl.TABLE_SCHEMA
GROUP BY my_schema.SCHEMA_NAME;

Kết quả mẫu (rút gọn)

+---------------------------+--------------------------------------------------+
| SCHEMA_NAME               | tables                                           |
+---------------------------+--------------------------------------------------+
| business                  | addconstraintdemo, employeetable, student...     |
| information_schema        | COLUMNS, TABLES, STATISTICS, ROUTINES...         |
| mysql                     | db, user, tables_priv, columns_priv, help_topic  |
| performance_schema        | events_waits_current, file_summary_by_instance...|
| sys                       | host_summary, io_global_by_file, ...             |
| web                       | demotable492, demotable500, DemoTable...         |
+---------------------------+--------------------------------------------------+

Giải thích

  • LEFT JOIN: Giữ cả database không có bảng (tables = NULL).
  • GROUP_CONCAT: Gom tên bảng thành 1 chuỗi.
  • TABLE_SCHEMA trong TABLES khớp với SCHEMA_NAME trong SCHEMATA.

Các truy vấn hữu ích khác

-- Chỉ database do user tạo (loại system db)
SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA
WHERE SCHEMA_NAME NOT IN ('information_schema','mysql','performance_schema','sys');

-- Đếm số bảng mỗi database
SELECT TABLE_SCHEMA, COUNT(*) AS table_count
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
GROUP BY TABLE_SCHEMA;

-- Tìm bảng theo pattern tên
SELECT TABLE_SCHEMA, TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE '%user%';

Lưu ý

  • GROUP_CONCAT có giới hạn độ dài (mặc định 1024) → kết quả có thể bị cắt. Dùng SET SESSION group_concat_max_len = 1000000; trước khi chạy.
  • Quyền truy cập: Cần quyền SELECT trên INFORMATION_SCHEMA (thường user thường có).
  • MySQL 8.0: Có thể dùng SHOW DATABASES + SHOW TABLES FROM db trong script, nhưng INFORMATION_SCHEMA linh hoạt hơn cho reporting.