跳转到内容

MySQL/语言/浏览数据库

来自维基教科书,开放的书籍,开放的世界
information_schema 数据库到 phpMyAdmin。

INFORMATION_SCHEMA

[编辑 | 编辑源代码]

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

[编辑 | 编辑源代码]

另一个同义词是

 SHOW FIELDS FROM `table`;

SHOW COLUMNS

[编辑 | 编辑源代码]

另一个同义词是

 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`
华夏公益教科书