首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL information_schema 系統庫深度解析:元數據查詢實戰指南

     編輯:MySQL 資料庫相關知識

概述

information_schema 是 MySQL 5.0+ 引入的虛擬資料庫,**不佔用磁盤空間**,提供統一的元數據訪問介面(即「數據字典」)。所有表皆為記憶體臨時表,查詢即時反映實例狀態。

核心表清單與用途

表名用途對應 SHOW 命令
SCHEMATA所有資料庫信息SHOW DATABASES
TABLES表/視圖信息(引擎、建表時間等)SHOW TABLES FROM db
COLUMNS列定義(類型、預設值、註釋)SHOW COLUMNS FROM db.tbl
STATISTICS索引詳情SHOW INDEX FROM db.tbl
USER_PRIVILEGES全局權限—
SCHEMA_PRIVILEGES資料庫級權限—
TABLE_PRIVILEGES表級權限—
COLUMN_PRIVILEGES列級權限—
CHARACTER_SETS字符集列表SHOW CHARACTER SET
COLLATIONS校對規則SHOW COLLATION
TABLE_CONSTRAINTS約束信息(PK、FK、UNIQUE)—
KEY_COLUMN_USAGE約束涉及的鍵列—
ROUTINES存儲過程/函數SHOW PROCEDURE STATUS
VIEWS視圖定義SHOW TABLES ... WHERE Table_type='VIEW'
TRIGGERS觸發器(需 SUPER 權限)SHOW TRIGGERS

實戰查詢範例

-- 1. 查找所有無主鍵的表
SELECT TABLE_SCHEMA, TABLE_NAME
FROM information_schema.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
  AND TABLE_SCHEMA NOT IN ('mysql','information_schema','performance_schema','sys')
  AND TABLE_NAME NOT IN (
      SELECT TABLE_NAME FROM information_schema.TABLE_CONSTRAINTS
      WHERE CONSTRAINT_TYPE = 'PRIMARY KEY'
  );

-- 2. 查詢大表(>1GB)及其引擎
SELECT TABLE_SCHEMA, TABLE_NAME, ENGINE,
       ROUND((DATA_LENGTH + INDEX_LENGTH)/1024/1024/1024, 2) AS size_GB
FROM information_schema.TABLES
WHERE (DATA_LENGTH + INDEX_LENGTH) > 1024*1024*1024
ORDER BY size_GB DESC;

-- 3. 找出未使用 utf8mb4 的表
SELECT TABLE_SCHEMA, TABLE_NAME, TABLE_COLLATION
FROM information_schema.TABLES
WHERE TABLE_COLLATION NOT LIKE 'utf8mb4%';

權限表注意事項

  • 權限相關表(*_PRIVILEGES)為**非標準表**,直接映射 mysql 系統庫授權表,僅供讀取,不可 DML。
  • MySQL 8.0 起引入 mysql.* 數據字典表,information_schema 為兼容層,部分查詢會轉向新字典。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved