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

歡迎訪問 生活随笔!

生活随笔

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

数据库

MySQL提供了以下三种方法用于获取数据库对象的元数据

發布時間:2023/12/10 数据库 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL提供了以下三种方法用于获取数据库对象的元数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

MySQL提供了以下三種方法用于獲取數據庫對象的元數據:

1)show語句

2)從INFORMATION_SCHEMA數據庫里查詢相關表

3)命令行程序,如mysqlshow, mysqldump

?

用SHOW語句獲取元數據

MySQL用show語句獲取元數據是最常用的方法,下面提供了幾種典型用法:

[sql]?view plain?copy
  • show?databases;??--列出所有數據庫??
  • show?create?database?db_name;??--查看數據庫的DDL??
  • show?tables;?--列出默認數據庫的所有表??
  • show?tables?from?db_name;??--列出指定數據庫的所有表??
  • show?table?status;??--查看表的描述性信息??
  • show?table?status?from?db_name;??
  • show?create?table?tbl_name;??--查看表的DDL??
  • show?columns?from?tbl_name;??--查看列信息??
  • show?index?from?tbl_name;??--查看索引信息??
  • show databases; --列出所有數據庫
  • show create database db_name; --查看數據庫的DDL
  • show tables; --列出默認數據庫的所有表
  • show tables from db_name; --列出指定數據庫的所有表
  • show table status; --查看表的描述性信息
  • show table status from db_name;
  • show create table tbl_name; --查看表的DDL
  • show columns from tbl_name; --查看列信息
  • show index from tbl_name; --查看索引信息
  • 有幾種show語句還可以帶有一條like 'pattern'字句,用來限制語句的輸出范圍,其中'pattern'允許包含'%'和'_'通配符,比如下面這條語句返回domaininfo表中以s開頭的所有列:

    ?

    ?

    [sql]?view plain?copy
  • show?columns?from?domaininfo?like?'s%';??
  • show columns from domaininfo like 's%'; 像上面這張支持like字句的所有show都可以改寫成一條where字句,如:

    ?

    ?

    [sql]?view plain?copy
  • show?columns?from?domaininfo?where?field='sysdomain';??
  • show columns from domaininfo where field='sysdomain';

    ?

    注:desc tbl_name和explain tbl_name的效果和show columns from tbl_name一致。


    從INFORMATION_SCHEMA數據庫里查詢相關表

    INFORMATION_SCHEMA是MySQL自帶的一個系統數據庫,它里面存儲了所有的元數據,通過select里面的相關表就可以獲取你想要的元數據。和show語句相比,它比較麻煩,但它的好處是標準的SQL語句,更具有可移植性,且更靈活,可以通過各種表達式獲取你真正需要的信息。

    ?

    從命令行獲取元數據

    前面兩種方法都必須得在MySQL命令行里執行,而mysqlshow和mysqldump提供了從OS命令行獲取元數據庫的方法,如: [plain]?view plain?copy
  • mysqlshow??--列出所有數據庫??
  • mysqlshow?db_name??--列出給定數據庫的所有表??
  • mysqlshow?db_name?tbl_name??--列出給定數據庫表的所有列??
  • mysqlshow?--keys?db_name?tbl_name??--列出索引信息??
  • mysqlshow?--status?db_name??--列出數據庫的描述性信息??
  • mysqlshow --列出所有數據庫
  • mysqlshow db_name --列出給定數據庫的所有表
  • mysqlshow db_name tbl_name --列出給定數據庫表的所有列
  • mysqlshow --keys db_name tbl_name --列出索引信息
  • mysqlshow --status db_name --列出數據庫的描述性信息
  • mysqldump可以讓你看到create table語句(就想show create table語句一樣),如: [sql]?view plain?copy
  • mysqldump?--no-data?db_name?[tbl_name]?...??
  • mysqldump --no-data db_name [tbl_name] ... 注意:在用mysqldump查看表結構時,一定要加上--no-data,否則你看到的將是數據庫表里的數據。

    MySQL元數據庫——information_schema

    2017年04月06日 23:45:05 閱讀數:1963

    平時使用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`;
    • 1

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

    CREATE TEMPORARY TABLE `TABLES`( )ENGINE=MEMORY
    • 1
    • 2

    ?

    五、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有元數據表,但是列名和表名不一樣。

    轉載于:https://www.cnblogs.com/pejsidney/p/9481153.html

    總結

    以上是生活随笔為你收集整理的MySQL提供了以下三种方法用于获取数据库对象的元数据的全部內容,希望文章能夠幫你解決所遇到的問題。

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