MySQL/语言/浏览数据库
information_schema
是由 MySQL 5 及更高版本提供的虚拟数据库,其中包含有关服务器和数据库的元数据。
您无法修改 information_schema
的结构和数据。您只能查询表。
许多 information_schema
表提供与 SHOW 语句检索到的相同数据。虽然使用 SHOW 命令更快(服务器响应速度更快,您键入的字符更少),但 information_schema
提供了一种更灵活的方法来获取和组织元数据。
包含数据库信息的 INFORMATION_SCHEMA 表是 SCHEMATA。
可以使用 mysqlshow
命令行工具(DOS/Unix)代替。如果服务器已使用 --skip-all-databases 选项启动,则无法显示数据库。
如果您没有“SHOW DATABASES”权限,您将只能看到您拥有某些权限的数据库。
以下 SQL 命令提供有关当前服务器上数据库的信息。
显示所有数据库
SHOW DATABASES;
SCHEMA 关键字可以替代 DATABASES。MySQL 不支持标准 SQL SCHEMAs,因此 SCHEMA 是数据库的同义词。它已添加以与其他 DBMS 兼容。
SHOW DATABASES LIKE 'pattern';
这里的 LIKE 运算符与普通 SELECT 或 DML 语句中的工作原理相同。因此,您可以列出所有名称以“my”开头的数据库
SHOW DATABASES LIKE 'my%';
您可以使用 WHERE 子句添加更复杂的过滤器
SHOW DATABASES WHERE conditions;
WHERE 子句允许您使用正则表达式、'='、'<' 和 '>' 运算符、字符串函数或其他有用表达式来过滤 SHOW DATABASES 返回的记录。
以下 SQL 命令提供有关数据库中包含的表和视图的信息。包含此信息的 INFORMATION_SCHEMA 表是 `TABLES` 和 `VIEWS`。
由于以下语句提供有关视图的信息很少,如果您需要获取有关视图的元数据,您可能更喜欢查询 VIEWS 表。
可以使用 mysqlshow
命令行工具代替。
USE `database`;
SHOW TABLES;
SHOW TABLES FROM `database`;
上面显示的两种形式是等效的。
您可以将过滤器应用于表名,以仅显示名称匹配模式的表。您可以使用 LIKE 运算符,就像在 SELECT 或 DML 语句中一样
SHOW TABLES LIKE `pattern`;
此外,您可以使用 WHERE 子句将更复杂的过滤器应用于 SHOW TABLES 命令返回的任何列
SHOW TABLES WHERE condition;
(见下文)
默认情况下,SHOW TABLES 只返回包含表名的单列。您可以使用 FULL 关键字获取更多信息
SHOW FULL TABLES;
这将添加一列名为 `Table_type`。这可以有三个值:'BASE TABLE' 表示表,'VIEW' 表示视图,'SYSTEM VIEW' 表示服务器创建的特殊表(通常仅用于 INFORMATION_SCHEMA 表)。
因此,您只能列出表
SHOW FULL TABLES WHERE `Table_type`='BASE TABLE';
或者,您只能列出视图
SHOW FULL TABLES WHERE `Table_type`='VIEW';
您可以获取缓存中打开的非临时表(不是视图)的列表
SHOW OPEN TABLES;
此命令与 SHOW TABLES 具有相同的参数,除了 FULL(在这种情况下无用)。您无法从 INFORMATION_SCHEMA 中获取此信息。
以下 SQL 命令提供有关表或视图中列的信息。包含此信息的 INFORMATION_SCHEMA 表是 COLUMNS。
可以使用 mysqlshow
命令行工具代替。
DESCRIBE `table`;
DESCRIBE `database`.`table`;
DESCRIBE `table` 'filter';
DESC 可以用作 DESCRIBE 的快捷方式。
'filter' 可以是列名。如果指定了列名,则只会显示该列。如果 'filter' 包含 '%' 或 '_' 字符,则会将其评估为 LIKE 条件。例如,您可以列出所有以 'my' 开头的字段
DESC `table` 'my%';
同义词是
EXPLAIN `table`;
另一个同义词是
SHOW FIELDS FROM `table`;
另一个同义词是
SHOW COLUMNS FROM `table`;
-- possible clauses:
SHOW COLUMNS FROM `table` FROM `database`;
SHOW COLUMNS FROM `table` LIKE 'pattern';
SHOW COLUMNS FROM `table` WHERE condition;
FIELDS 和 COLUMNS 是同义词。EXPLAIN 也是 SHOW COLUMNS / FIELDS 的同义词,但它不支持所有子句。
数据库名称可以用两种形式指定
SHOW COLUMNS FROM `table` FROM `database`;
两者
SHOW COLUMNS FROM `database`.`table`;
使用 FULL 关键字,可以重新获取额外信息:列的排序规则、您对列的权限和注释。
字段 | 类型 | 排序规则 | 空值 | 键 | 默认值 | 额外 | 权限 | 注释 |
---|---|---|---|---|---|---|---|---|
... | ... | ... | ... | ... | ... | ... | ... | ... |
以下 SQL 命令提供有关表中索引的信息。有关键的信息包含在 INFORMATION_SCHEMA 中的 `COLUMNS` 表中。
可以使用 mysqlshow -k
命令行工具代替。
SHOW INDEX FROM `TABLE`;
SHOW INDEX FROM `TABLE` FROM `databases`;
KEYS 保留字可以用作 INDEX 的同义词。没有提供其他子句。
结果示例
表 | 非唯一 | 键名 | 索引中的序列号 | 列名 | 排序规则 | 基数 | 子部分 | 打包 | 空值 | 索引类型 | 注释 | 索引注释 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Table1 | 0 | PRIMARY | 1 | id | A | 19 | NULL | NULL | BTREE |
- 备注:使用 phpMyAdmin 可以轻松地多次创建相同的索引,这会减慢请求速度。
要删除索引
DROP INDEX `date_2` on `Table1`