日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL元数据库——information_schema

發布時間:2023/12/3 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL元数据库——information_schema 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉自: https://www.cnblogs.com/postnull/p/6697077.html

平時使用MySQL客戶端操作數據庫的同學,只要稍微留神都會發現,除了我們建的庫之外,還經常看到三個數據庫的影子:

1. information_schema 2. performance_schema 3. mysql

這三個數據庫究竟是什么東西呢?今天我們好好認識一下MySQL三個火槍手中的information_schema
?

一、數據庫實例和數據庫

在認識information_schema前,我們先了解下數據庫實例和數據庫的區別和聯系。我們本地啟動MySQL服務,就是啟動了一個數據庫實例,他首先是一個進程管理了一系列的數據庫文件。而我們執行create database cmcc_web?這條SQL語句時,才是真正創建一個數據庫,他是一堆表的集合,其實也是文件的集合。簡而言之,數據庫實例就是RDBMS(數據庫管理系統),數據庫就是Database,Database是存放數據的倉庫,RDBMS就是管理倉庫的系統。
在MySQL中,每個schema就是對應一個數據庫。這個詞將會在下面的篇幅頻繁出現。

?

二、數據庫元數據

元(meta),一般被我們翻譯成“關于……的……”。元數據(meta data)——“data about data” 關于數據的數據,一般是結構化數據(如存儲在數據庫里的數據,規定了字段的長度、類型等)。(這段話來源于知乎)。
所以metadata就是描述數據的數據,在MySQL中就是描述database的數據。有哪些數據庫、每個表有哪些表、表有多少字段、字段是什么類型等等,這樣的數據就是數據庫的元數據。

官方定義:

INFORMATION_SCHEMA provides access to database metadata, information about the MySQL server such as the name of a database or table, the data type of a column, or access privileges

綜上,我們可以稱information_schema是一個元數據庫。它就像物業公司的信息庫,對管理的每棟大廈有多少電梯、電梯型號、每個房間的長寬高等等了如指掌。
?

三、常見的表

1、SCHEMATA
提供數據庫信息,有哪些數據庫,字符集是GBK還是UTF-8等等。常用字段:

字段名含義備注
SCHEMA_NAME數據庫名
DEFAULT_CHARACTER_SET_NAME字符集
DEFAULT_COLLATION_NAME排序規則

等同命令:SHOW DATABASES

2、TABLES
提供表的信息,數據庫有哪些表,是什么存儲引擎等等。常用字段:

字段名含義備注
SCHEMA_NAME數據庫名
TABLE_NAME表名
TABLE_TYPE表的類型類型有BASE TABLE、VIEW、SYSTEM VIEW
ENGINE存儲引擎
CREATE_TIME建表時間

等同命令:SHOW TABLES

3、COLUMNS
提供字段的信息,有哪些字段字段類型是什么等等。常用字段:

字段名含義備注
SCHEMA_NAME數據庫名
TABLE_NAME表名
COLUMN_NAME字段名
COLUMN_TYPE字段類型如int(10),varchar(250)

等同命令:SHOW COLUMNS?或者?desc tctest.emp?看emp表的具體字段。

4、STATISTICS
這張表的單詞是統計的意思,但是卻是索引的信息,真奇怪。常用字段:

字段名含義備注
SCHEMA_NAME數據庫名
TABLE_NAME表名
INDEX_SCHEMA也是數據庫名
INDEX_NAME索引名
COLUMN_NAME字段名
INDEX_TYPE索引類型一般是BTREE

等同命令:SHOW INDEX

5、TABLE_CONSTRAINTS
提供約束情況,我們想看看表有哪些約束?約束指的是唯一性約束、主鍵約束、外鍵約束。常用字段:

字段名含義備注
CONSTRAINT_SCHEMA數據庫名
CONSTRAINT_NAME約束名
TABLE_SCHEMA也是數據庫名
TABLE_NAME表名
CONSTRAINT_TYPE約束類型UNIQUE、PRIMARY KEY、FOREIGN KEY

唯一約束和主鍵約束,我們在前面的索引中一樣可以查到。

6、KEY_COLUMN_USAGE
有STATISTICS和TABLE_CONSTRAINTS表,為什么還需要KEY_COLUMN_USAGE?
因為外鍵時沒有指出參考的是哪張表的哪個字段!常用字段:

字段名含義備注
CONSTRAINT_SCHEMA數據庫名
CONSTRAINT_NAME約束名PRIMARY或列名或外鍵名
TABLE_SCHEMA也是數據庫名
TABLE_NAME表名
COLUMN_NAME列名
REFERENCED_TABLE_SCHEMA參考的數據庫
REFERENCED_TABLE_NAME參考的表
REFERENCED_COLUMN_NAME參考的列

相比前面兩個,KEY_COLUMN_USAGE這個表的信息是最全的。包括主鍵、外鍵、唯一約束。

7、ROUTINES
routines是程序的意思,在MySQL當然指的是函數和存儲過程

字段名含義備注
SPECIFIC_NAME程序名
ROUTINE_SCHEMA數據庫名
ROUTINE_NAME程序名
ROUTINE_TYPE程序類型PROCEDURE或FUNCTION
ROUTINE_BODY函數體好像都是SQL
ROUTINE_DEFINITION具體的程序語句

并沒有show ROUTINES語句。

8、VIEWS
查詢數據庫下所有的視圖

字段名含義備注
TABLE_SCHEMA數據庫名
TABLE_NAME表名
VIEW_DEFINITION視圖定義語句

9、TRIGGERS
查詢所有的觸發器

字段名含義備注
TRIGGER_SCHEMA數據庫名
TRIGGER_NAME觸發器名
EVENT_OBJECT_SCHEMA觸發的數據庫
EVENT_OBJECT_TABLE觸發的表
ACTION_STATEMENT觸發的語句
ACTION_TIMING觸發時機BEFORE或AFTER

等同命令:show triggers from tctest

10、其他表
ENGINES:列舉了當前數據庫對InnoDB、MEMORY、MyISAM等各種存儲引擎的支持情況。等同show ENGINES
GLOBAL_VARIABLES:服務器變量設置,一些開關和設置。等同命令show global variables。除了global還有session。
PLUGINS:MySQL的插件列表。可以看到存儲引擎InnoDB甚至binlog都是插件!binlog是強制加載的,InnoDB是默認打開的。等同命令show PLUGINS
PROCESSLIST:查看正在運行的線程!比如我查這個表,就看到一個查詢的線程。等同命令show full processlist

?

四、是表還是視圖?

文檔說information_schema下的表不是基本表,而是視圖。但是在VIEWS中查不到,在TABLES中能查到這些表,表類型是SYSTEM VIEW。存儲引擎使用的是MEMORY或MyISAM。
使用show命令

show create table information_schema.`TABLES`;

可以看到創建的是臨時表,存儲引擎是MEMORY

CREATE TEMPORARY TABLE `TABLES`( )ENGINE=MEMORY

五、show命令還是select語句

show命令更簡便,有時也能達到相同目的。但是輸出格式已固定,select表的結果更完善,符合SQL標準。
?

六、Oracle中有information_schema嗎?

沒有實踐過,但是平時使用Oracle時沒有見到過這個庫。官方的FAQ給出了結果:

F:What is the difference between the Oracle Data Dictionary and MySQL INFORMATION_SCHEMA?

A:Both Oracle and MySQL provide metadata in tables. However, Oracle and MySQL use different table names and column names. The MySQL implementation is more similar to those found in DB2 and SQL Server, which also support INFORMATION_SCHEMA as defined in the SQL standard.

大意是DB2和SQL Server都支持information_schema,Oracle有元數據表,但是列名和表名不一樣。

總結

以上是生活随笔為你收集整理的MySQL元数据库——information_schema的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。