萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 查詢庫下所有表資訊:PHP 實現與 INFORMATION_SCHEMA 字段詳解

需獲取指定資料庫下所有表的名稱、行數、大小等元數據?本文提供 PHP + MySQL 完整實現代碼,並詳細解析 INFORMATION_SCHEMA.TABLES 返回的每個字段含義。

PHP 實現代碼

<?php
require 'class/db.php';

$sql = "SELECT * FROM INFORMATION_SCHEMA.TABLES 
        WHERE TABLE_SCHEMA = 'ecshop' 
          AND TABLE_TYPE = 'BASE TABLE' 
        ORDER BY TABLE_ROWS DESC";

$arr = $db->queryArray($sql);

foreach ($arr as $v) {
    echo $v->TABLE_NAME . ' - ' . $v->TABLE_ROWS . '<br>';
}
?>

核心字段詳細說明

字段名含義範例值
TABLE_CATALOG目錄名 (MySQL 固定為 NULL)NULL
TABLE_SCHEMA資料庫名稱leo_ecshop
TABLE_NAME表名稱ecs_goods
TABLE_TYPE表類型BASE TABLE / VIEW
ENGINE存儲引擎MyISAM / InnoDB
VERSION表定義版本10
ROW_FORMAT行格式Dynamic / Compact / Compressed
TABLE_ROWS預估行數 (InnoDB 為估算值)7
AVG_ROW_LENGTH平均行長度 (位元組)286
DATA_LENGTH數據文件大小 (位元組)2008
MAX_DATA_LENGTH最大數據容量281474976710655
INDEX_LENGTH索引文件大小 (位元組)11264
DATA_FREE已分配未使用空間 (位元組)0
AUTO_INCREMENT自增下一值8
CREATE_TIME建立時間2016-11-15 22:27:40
UPDATE_TIME最後更新時間2016-12-04 11:25:55
CHECK_TIME最後檢查時間2016-12-04 11:19:50
TABLE_COLLATION校對規則utf8_general_ci
CHECKSUM校驗和NULL
CREATE_OPTIONS建立選項(空)
TABLE_COMMENT表備註(空)

進階用法:獲取表大小排行

SELECT 
  TABLE_NAME,
  ENGINE,
  TABLE_ROWS,
  ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024, 2) AS SIZE_MB,
  ROUND(DATA_LENGTH / 1024 / 1024, 2) AS DATA_MB,
  ROUND(INDEX_LENGTH / 1024 / 1024, 2) AS INDEX_MB
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'your_db'
  AND TABLE_TYPE = 'BASE TABLE'
ORDER BY (DATA_LENGTH + INDEX_LENGTH) DESC;

注意事項

  • TABLE_ROWS 對 InnoDB 是估算值,精確行數需 SELECT COUNT(*)。
  • DATA_FREE 顯示碎片空間,大值提示需 OPTIMIZE TABLE。
  • 大量表查詢 INFORMATION_SCHEMA 可能較慢,生產環境建議快取結果。
copyright © 萬盛學電腦網 all rights reserved