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] ...