<think>
我们被要求查看MySQL中的数据库。在MySQL中,查看数据库的命令是`SHOW DATABASES;`。这条命令会列出MySQL服务器上所有的数据库。
此外,我们也可以使用`SHOW SCHEMAS;`,因为SCHEMAS是DATABASES的同义词。
如果我们想查看特定的数据库,比如匹配某个模式的数据库名,可以使用`SHOW DATABASES LIKE 'pattern';`。
下面给出一些示例:
</think>
### 查看 MySQL 数据库的 SQL 命令详解
在 MySQL 中,查看数据库信息主要使用以下 SQL 命令:
#### 1. 查看所有数据库列表
```sql
SHOW DATABASES;
```
**解释**:
- 显示 MySQL 服务器中的所有数据库
- 结果包含系统数据库如 `information_schema`, `mysql`, `performance_schema`, `sys`
#### 2. 查看特定数据库结构
```sql
SHOW CREATE DATABASE database_name;
```
**示例**:
```sql
SHOW CREATE DATABASE mydb;
```
**输出**:
```
+----------+---------------------------------------------------------------+
| Database | Create Database |
+----------+---------------------------------------------------------------+
| mydb | CREATE DATABASE `mydb` /*!40100 DEFAULT CHARACTER SET utf8mb4 */ |
+----------+---------------------------------------------------------------+
```
**解释**:
- 显示创建指定数据库的完整 SQL 语句
- 包含字符集、排序规则等详细信息
#### 3. 查看当前使用的数据库
```sql
SELECT DATABASE();
```
**解释**:
- 返回当前会话中正在使用的数据库名称
- 如果未选择任何数据库,返回 `NULL`
#### 4. 查看数据库中的表
```sql
SHOW TABLES FROM database_name;
```
**示例**:
```sql
SHOW TABLES FROM information_schema;
```
**输出**:
```
+---------------------------------------+
| Tables_in_information_schema |
+---------------------------------------+
| CHARACTER_SETS |
| COLLATIONS |
| COLLATION_CHARACTER_SET_APPLICABILITY |
| ... |
+---------------------------------------+
```
#### 5. 查看数据库字符集和排序规则
```sql
SELECT
SCHEMA_NAME AS 'Database',
DEFAULT_CHARACTER_SET_NAME AS 'Charset',
DEFAULT_COLLATION_NAME AS 'Collation'
FROM information_schema.SCHEMATA;
```
**输出**:
```
+--------------------+---------+--------------------+
| Database | Charset | Collation |
+--------------------+---------+--------------------+
| information_schema | utf8 | utf8_general_ci |
| mysql | latin1 | latin1_swedish_ci |
| performance_schema | utf8 | utf8_general_ci |
| sys | utf8 | utf8_general_ci |
| mydb | utf8mb4 | utf8mb4_0900_ai_ci |
+--------------------+---------+--------------------+
```
#### 6. 查看数据库大小(存储空间)
```sql
SELECT
table_schema AS 'Database',
SUM(data_length + index_length) / 1024 / 1024 AS 'Size (MB)'
FROM information_schema.TABLES
GROUP BY table_schema;
```
**输出**:
```
+--------------------+---------------+
| Database | Size (MB) |
+--------------------+---------------+
| information_schema | 0.15625000 |
| mysql | 2.51562500 |
| performance_schema | 0.00000000 |
| sys | 0.01562500 |
| mydb | 12.54687500 |
+--------------------+---------------+
```
#### 7. 查看数据库权限信息
```sql
SELECT
Db AS 'Database',
User,
Host,
CONCAT_WS(', ',
IF(Select_priv='Y', 'SELECT', ''),
IF(Insert_priv='Y', 'INSERT', ''),
IF(Update_priv='Y', 'UPDATE', ''),
IF(Delete_priv='Y', 'DELETE', ''),
IF(Create_priv='Y', 'CREATE', ''),
IF(Drop_priv='Y', 'DROP', ''),
IF(Grant_priv='Y', 'GRANT', ''),
IF(References_priv='Y', 'REFERENCES', ''),
IF(Index_priv='Y', 'INDEX', ''),
IF(Alter_priv='Y', 'ALTER', ''),
IF(Create_tmp_table_priv='Y', 'CREATE TEMP TABLES', ''),
IF(Lock_tables_priv='Y', 'LOCK TABLES', ''),
IF(Create_view_priv='Y', 'CREATE VIEW', ''),
IF(Show_view_priv='Y', 'SHOW VIEW', ''),
IF(Create_routine_priv='Y', 'CREATE ROUTINE', ''),
IF(Alter_routine_priv='Y', 'ALTER ROUTINE', ''),
IF(Execute_priv='Y', 'EXECUTE', ''),
IF(Event_priv='Y', 'EVENT', ''),
IF(Trigger_priv='Y', 'TRIGGER', '')
) AS 'Privileges'
FROM mysql.db
ORDER BY Db, User, Host;
```
### 实用命令组合示例
#### 查看所有数据库及其大小和字符集
```sql
SELECT
s.SCHEMA_NAME AS 'Database',
COALESCE(ROUND(SUM(t.DATA_LENGTH + t.INDEX_LENGTH) / 1024 / 1024, 2), 0) AS 'Size (MB)',
s.DEFAULT_CHARACTER_SET_NAME AS 'Charset',
s.DEFAULT_COLLATION_NAME AS 'Collation'
FROM information_schema.SCHEMATA s
LEFT JOIN information_schema.TABLES t
ON s.SCHEMA_NAME = t.TABLE_SCHEMA
GROUP BY s.SCHEMA_NAME, s.DEFAULT_CHARACTER_SET_NAME, s.DEFAULT_COLLATION_NAME
ORDER BY s.SCHEMA_NAME;
```
#### 查看数据库创建时间(MySQL 8.0+)
```sql
SELECT
SCHEMA_NAME AS 'Database',
CREATE_TIME
FROM information_schema.SCHEMATA
WHERE SCHEMA_NAME NOT IN
('information_schema', 'mysql', 'performance_schema', 'sys');
```
#### 使用命令行工具查看数据库
```bash
# 登录MySQL
mysql -u username -p
# 查看所有数据库
mysql> SHOW DATABASES;
# 切换到特定数据库
mysql> USE database_name;
# 查看当前数据库中的表
mysql> SHOW TABLES;
# 查看数据库状态信息
mysql> SHOW STATUS LIKE 'Uptime';
```
### 注意事项
1. 需要适当的权限才能查看某些数据库信息
2. `information_schema` 数据库包含所有元数据信息
3. MySQL 5.7 和 MySQL 8.0 在系统表结构上有所不同
4. 对于生产环境,建议使用 `SELECT` 查询而非 `SHOW` 命令以便于程序处理结果
---