數據庫的基本信息,都在這幾張表里了


話說生產環境的數據庫是不能本地直連的,所以公司一般都會提供一個比較簡陋的數據庫查詢頁面,在可控的范圍內,支持你提交一些查詢、變更SQL,滿足你的查庫功能。但是因為不能直接使用Navicat、DataGrip這些好用的數據庫客戶端,一些數據庫的基本信息獲取起來就比較麻煩了。比如你想看線上業務表都有哪些索引?是不是和測試環境不一致?這種情況應該怎么辦呢?

其實好辦!因為數據庫的各種基礎信息,都保存在INFORMATION_SCHEMA這個schema下了。INFORMATION_SCHEMA是MySQL自帶的數據庫,存儲了MySQL中各個數據庫的元數據。所以,只需要從INFORMATION_SCHEMA下的各個表里取數據,就可以獲取到數據庫的基本信息了

1、庫信息

庫信息存放在SCHEMATA表中,使用以下語句,即可查詢全部的庫信息。

select *
from INFORMATION_SCHEMA.SCHEMATA;

當然,你也可以用對應的show databases命令來獲取庫信息,但是顯示的內容會更簡潔些,只會展示數據庫的名稱。

2、表信息

表信息存放在TABLES表中,使用以下語句,即可查詢全部的表信息。包括表名、數據量、自增值、行數等信息。

select *
from INFORMATION_SCHEMA.TABLES;

但是這么查詢,會查出所有schema下的表信息,所以加上查詢條件TABLE_SCHEMA = 'yourSchemaName'就可以了。

當然,這個表的查詢也有對應的語句show tables from yourSchemaName。只不過這個語句也只會展示當前庫下所有的表名,而且遠沒有直接從TABLES表里查詢的數據詳細。

3、列信息

列信息存放在COLUMNS表中,使用以下語句,即可查詢指定表的列信息。包括列名、數據類型、長度、是否為空等你創建表時的基本信息。

select *
from INFORMATION_SCHEMA.COLUMNS
where table_name = 'yourTableName';

對應的語句是show columns from yourTableName;

4、索引信息

索引信息存放在STATISTICS表中(很奇怪,為啥這個表不叫INDEX),使用以下語句,即可查詢指定表的索引信息。包含了索引名、索引的字段等。

select *
from INFORMATION_SCHEMA.STATISTICS
where table_name = 'yourTableName';

對應的命令是show index from yourTableName;這個命令還是比較給力的,相比於前幾個命令,它列出了很詳細的索引信息。

優化后的SQL,建議收藏

好啦,其實INFORMATION_SCHEMA下的表還有很多,但是我認為平時最常用到的就是這四張表了。大家應該都已經知道了這四張表存放的信息和查詢方式,這里我優化了查詢SQL,讓大家可以在查詢的時候更直觀~

-- 查表
select TABLE_NAME                 as 表名,
       ENGINE                     as 存儲引擎,
       TABLE_ROWS                 as 行數,
       AVG_ROW_LENGTH             as 平均行大小,
       DATA_LENGTH / 1024 / 1024  as 表數據大小(MB),
       INDEX_LENGTH / 1024 / 1024 as 索引大小(MB),
       AUTO_INCREMENT             as 當前主鍵自增值,
       TABLE_COMMENT              as 表描述
from INFORMATION_SCHEMA.TABLES
where TABLE_SCHEMA = 'yourSchemaName';

-- 查列
SELECT COLUMN_NAME              列名,
       COLUMN_TYPE              數據類型,
       DATA_TYPE                字段類型,
       CHARACTER_MAXIMUM_LENGTH 長度,
       IS_NULLABLE              是否為空,
       COLUMN_DEFAULT           默認值,
       COLUMN_COMMENT           備注
FROM INFORMATION_SCHEMA.COLUMNS
where table_name = 'yourTableName';

-- 查索引
select INDEX_NAME   as 索引名,
       COLUMN_NAME  as 索引中的字段名,
       SEQ_IN_INDEX as 索引中的順序,
       INDEX_TYPE   as 索引類型
from INFORMATION_SCHEMA.STATISTICS
where table_name = 'yourTableName';


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM