美文网首页半栈工程师
获取数据库元数据

获取数据库元数据

作者: TinyDolphin | 来源:发表于2018-01-05 15:16 被阅读0次

    MySQL 提供了多种获取数据库元数据(有关数据库的信息与它里面的各种对象)的方法:

    • 各种 SHOW 语句,如 SHOW DATABASES 或 SHOW TABLES;
    • INFORMATION_SCHEMA 数据库里的表;
    • 命令行程序,如 mysqlshow 或 mysqldump。

    使用 SHOW 语句获取元数据

    -- 列出可以访问的数据库
    SHOW DATABASES ;
    -- 显示数据库的 CREATE DATABASE 语句
    SHOW CREATE DATABASE db_name;
    -- 列出默认数据库或给定数据库里的表
    SHOW TABLES;
    SHOW TABLES FROM db_name;
    -- SHOW TABLES 语句无法显示出 temporary 表
    -- 显示表的 CREATE TABLE 语句
    SHOW CREATE TABLE tbl_name;
    -- 显示表里的列或索引信息
    -- SHOW COLUMNS 与 DESCRIBE tbl_name & EXPLAIN tbl_name 同一个意思
    SHOW COLUMNS FROM tbl_name;
    SHOW INDEX FROM tbl_name;
    -- 显示默认数据库或某给定数据库里的表描述信息
    SHOW TABLE STATUS;
    SHOW TABLE STATUS FROM db_name;
    -- 把 tbl_name 表里面列的名字以"s" 开头的所用列都显示出来
    SHOW COLUMNS FROM tbl_name LIKE 's%';
    
    -- 在应用程序中识别出某个给定的表是否存在
    SHOW TABLES LIKE 'student';
    SHOW TABLES FROM db_name LIKE 'tbl_name';
    SELECT count(*) FROM tbl_name; -- 最适合 MyISAM 表,不适合 InnoDB 表,因为会全表扫描
    SELECT * FROM tbl_name WHERE FALSE ; -- 通用,对于不同的存储引擎,都执行都很快
    

    借助 INFORMATION_SCHEMA 获取元数据

    -- 查询 INFORMATION_SCHEMA 库中包含了哪些表
    SHOW TABLES IN information_schema;
    -- SCHEMATA、TABLES、VIEWS、ROUTINES、TRIGGERS、EVENTS、PARAMETERS、PARTITIONS、COLUMNS
    --  以上是与数据库、表、视图、存储过程、触发器、事件、表分区和列有关的信息
    -- FILES
    --  与用于存储表空间数据的那些文件有关的信息
    -- TABLE_CONSTRAINTS、KEY_COLUMN_USAGE:
    --  与具有约束条件的表和列有关的信息
    -- STATISTICS
    --  与表索引特性有关的信息
    -- REFERENTIAL_CONSTRAINTS
    --  与外键有关的信息
    -- CHARACTER_SETS、COLLATIONS、COLLATION_CHARACTER_SET_APPLICABILITY
    --  与所支持的字符集、每种字符集的排序规则,以及每种排序规则与其字符集之间的映射关系有关的信息
    -- ENGINES、PLUGINS
    --  与存储引擎和服务器插件有关的信息
    -- USER_PRIVILEGES、SCHEMA_PRIVILEGES、TABLE_PRIVILEGES、COLUMN_PRIVILEGES
    --  与全局、数据库、表和列的权限分配有关的信息,分别来自于 mysql 数据库里的 user、db、tables_priv 和 column_priv 表
    -- GLOBAL_VARIABLES、SESSION_VARIABLES、GLOBAL_STATUS、SESSION_STATUS
    --  全局和会话的系统变量值和状态变量值
    -- PROCESSLIST
    --  与服务器内的执行线程有关的信息
    
    -- 查询 information_schema 里表都包含哪些列?
    DESCRIBE information_schema.schemata;
    -- 测试某个特定的表是否存在:1 存在,0 不存在
    SELECT count(*) FROM information_schema.tables
    WHERE table_schema = 'sampdb' AND table_name='member';
    -- 检查某个表所使用的是哪种存储引擎
    SELECT engine FROM information_schema.tables
    WHERE table_schema = 'sampdb' AND table_name='student';
    

    从命令行获取元数据
    windows 命令行或者 Linux 命令行
    在使用 mysqlshow 和 mysqldump 时,请记住要指定必要的链接参数选项,如 --host、--user 或 --password

    -- 列出服务器所管理的数据库
    mysqlshow
    -- 列出数据库里的表
    mysqlshow db_name
    -- 显示表里的列信息
    mysqlshow db_name tbl_name
    -- 显示表里的索引信息
    mysqlshow --keys db_name tbl_name
    -- 显示数据库里所有表的描述性信息
    mysqlshow --status db_name
    -- 客户端程序 mysqldump 能够让你看到 CREATE TABLE 语句所定义的表结构
    mysqldump --no-data db_name [tbl_name] ...
    
    

    相关文章

      网友评论

        本文标题:获取数据库元数据

        本文链接:https://www.haomeiwen.com/subject/vmvjnxtx.html