Zi 字媒體
2017-07-25T20:27:27+00:00
MySQL - information_schema
MySQL:8.0.26
information_schema 是 MySQL 內建存放 中繼資料(Metadata) 的資料庫,例如你所有資料庫的名稱、Table 資訊、欄位的資料型別、訪問存取權等等,都會紀錄在 information_schema 裡。
Basic Usage
由於 information_schema 是內建資料庫,一般狀況下並不會操作到它。不過,如果你擁有的資料量很大,需要進行資料的 migration、sunset 特定欄位或資料表時,透過 information_schema 去做整體的清查就會非常快速且方便。
以下為 information_schema 較可能會使用到的 table:
Name
Description
SCHEMATA
紀錄資料庫資訊,show databases 指令就是會走訪此表。
TABLES
紀錄 Table 資訊,可以看到表名稱、所屬哪個資料庫、表的型態和使用的 Engine 等等。
COLUMNS
紀錄欄位資訊,可以看到所有欄位的資訊。
STATISTICS
紀錄所有 Index 資訊。
USER_PRIVILEGES
紀錄使用者權限資訊。
SCHEMA_PRIVILEGES
紀錄資料庫權限資訊。
TABLE_PRIVILEGES
紀錄 Table 權限資訊。
COLUMN_PRIVILEGES
紀錄欄位權限資訊。
VIEWS
紀錄所有 View 的資訊。
Usage Scenario
以下就列幾個常見的需求情境的使用方法:
查詢資料表資訊
# 取得資料表資訊
SELECT TABLE_NAME, TABLE_SCHEMA, TABLE_TYPE, ENGINE FROM information_schema.TABLES ORDER BY TABLE_NAME;
# 取得資料表的 Size
# DATA_LENGTH + INDEX_LENGTH 就是大小,單位是 bytes.
SELECT TABLE_NAME, round(((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024), 2) `Size in MB` FROM information_schema.TABLES WHERE table_schema = 'my_db_name' AND table_name = 'album';
查詢 View 資訊
# 取得 View 資訊
SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_TYPE LIKE 'VIEW' AND TABLE_SCHEMA LIKE 'my_db_name';
# 尋找哪張 View 裡有使用到 album_name 欄位
SELECT views.TABLE_NAME, information_schema.COLUMNS.COLUMN_NAME FROM (SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_TYPE LIKE 'VIEW' AND TABLE_SCHEMA LIKE 'my_db_name') AS views LEFT JOIN information_schema.COLUMNS ON information_schema.COLUMNS.TABLE_NAME = views.TABLE_NAME WHERE COLUMN_NAME = 'album_name';
Categories: MySQL
Tags: MySQL
分類
Android
AngularJS
API Blueprint
Audio Engineering
Chrome
Cloud-Solution
AWS
Azure
Database
MySQL
DataStructure
Docker
Editor
Vim
FFmpeg
Firefox
Git
GitLab
Google API
Hadoop
HTTP
Language
Go
Java
JavaScript
jQuery
jQueryChart
Node.js
Vue
Vue-CLI
PHP
Laravel
Lumen
ZendFramework
Python
Mac
Network
Cisco
DLink
Juniper
Oauth
Server
Apache
Share
Unix
FreeBSD
Linux
WebDesign
Bootstrap
CSS
HTML
Wordpress
Search
搜尋關鍵字:
寫了
5860316篇文章,獲得
23313次喜歡