如果忘记了数据库或表的名称,或者不确定给定表的结构(例如,其列的名称),该怎么办呢?MySQL通过几个语句解决了这个问题,这些语句提供了有关它支持的数据库和表的信息。
你之前已经看过SHOW DATABASES,它会列出服务器管理的所有数据库。要找出当前选择的数据库,可以使用DATABASE()函数:
mysql> SELECT DATABASE();
+------------+
| DATABASE() |
+------------+
| menagerie |
+------------+
如果你还没有选择任何数据库,那么DATABASE()函数的结果将是NULL。
要找出默认数据库包含哪些表(例如,当你不确定某个表的名称时),可以使用以下语句:
mysql> SHOW TABLES;
+---------------------+
| Tables_in_menagerie |
+---------------------+
| event |
| pet |
+---------------------+
由SHOW TABLES语句生成的输出中的列名总是Tables_in_db_name,其中db_name是数据库的名称。这是为了帮助你清晰地知道这些表属于哪个数据库。
如果你想要了解表的结构,DESCRIBE语句非常有用;它会显示有关表的每一列的信息:
mysql> DESCRIBE pet;
+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| name | varchar(20) | YES | | NULL | |
| owner | varchar(20) | YES | | NULL | |
| species | varchar(20) | YES | | NULL | |
| sex | char(1) | YES | | NULL | |
| birth | date | YES | | NULL | |
| death | date | YES | | NULL | |
+---------+-------------+------+-----+---------+-------+
在DESCRIBE或DESC命令的输出中:
- Field:指示列名。
- Type:是列的数据类型。
- NULL:表示该列是否可以包含NULL值。
- Key:表示该列是否被索引。
- Default:指定列的默认值。
- Extra:显示有关列的特殊信息。例如,如果列是使用AUTO_INCREMENT选项创建的,则此处的值将是auto_increment而不是空的。
DESC确实是DESCRIBE的简写形式,它们提供相同的功能。
可以使用SHOW CREATE TABLE语句来获取创建一个已存在的表所需的CREATE TABLE语句。这在想要复制表结构到新环境或者需要查看表的完整创建语句时非常有用。