# 数据库类型功能差异分析

**分析日期**：2026-01-28  
**分析范围**：MySQL、Redis、MongoDB 功能支持差异

---

## 一、功能支持对比表

| 功能模块 | MySQL | Redis | MongoDB | 说明 |
|---------|-------|-------|---------|------|
| **连接管理** |
| 连接配置 | ✅ | ✅ | ✅ | 都支持主机、端口、用户名、密码；MySQL默认端口3306/用户root，Redis默认端口6379/DB0，MongoDB默认端口27017/用户admin |
| 数据库选择 | ✅ | ✅ | ✅ | MySQL/MongoDB=数据库名，Redis=DB编号(0-15)；连接树中Redis显示为"DB 0"、"DB 1"等，支持切换 |
| 连接测试 | ✅ | ✅ | ✅ | 都支持连接测试 |
| **SQL/命令执行** |
| 查询执行 | ✅ | ✅ | ✅ | MySQL=SELECT，Redis=GET等，MongoDB=find |
| 更新执行 | ✅ | ✅ | ✅ | MySQL=INSERT/UPDATE/DELETE，Redis=SET等，MongoDB=insert/update |
| 结果类型 | query/update | command | query/update | MySQL区分查询/更新，Redis统一为command |
| 执行超时 | 30秒 | 30秒 | 30秒 | 统一超时时间 |
| **数据库列表** |
| 获取数据库列表 | ✅ | ⚠️ | ✅ | Redis返回0-15，MySQL/MongoDB动态查询 |
| 数据库切换 | ✅ | ✅ | ✅ | 都支持切换数据库 |
| **表/集合/Key列表** |
| 获取表列表 | ✅ | ✅ | ✅ | MySQL=表，Redis=Key，MongoDB=集合 |
| 懒加载 | ✅ | ✅ | ✅ | 都支持懒加载 |
| 模式匹配 | ❌ | ✅ | ❌ | Redis支持Key模式匹配 |
| **表结构查询** |
| 表结构查询 | ✅ | ✅ | ✅ | MySQL=列信息，Redis=Key信息，MongoDB=集合结构 |
| 列信息 | ✅ | ❌ | ⚠️ | MySQL显示列详情，MongoDB显示字段统计 |
| 索引信息 | ✅ | ❌ | ✅ | MySQL/MongoDB支持，Redis不支持 |
| 文档示例 | ❌ | ❌ | ✅ | 仅MongoDB显示文档示例 |
| **索引查询** |
| 索引列表 | ✅ | ❌ | ⚠️ | MySQL独立查询，MongoDB包含在集合结构中 |
| 索引详情 | ✅ | ❌ | ✅ | MySQL/MongoDB显示索引详情 |
| **编辑器支持** |
| 语法高亮 | SQL | JavaScript | JavaScript | MySQL使用SQL，Redis/MongoDB使用JS |
| 默认内容 | `select 1;` | `GET key\nSET key value` | `db.collection.find({})` | 根据类型自动设置 |
| 执行按钮文本 | "执行" | "执行命令" | "执行查询" | 根据类型自动设置 |
| **结果展示** |
| 表格展示 | ✅ | ⚠️ | ⚠️ | MySQL适合表格，Redis/MongoDB适合JSON |
| JSON展示 | ⚠️ | ✅ | ✅ | Redis/MongoDB命令结果用JSON展示 |
| 统计信息 | ✅ | ✅ | ✅ | 都显示执行时间和影响行数 |
| **数据存储** |
| SQL编辑器内容关联 | ✅ | ✅ | ✅ | 都支持SQL编辑器内容关联连接ID |
| ~~标签页关联~~ | ⚠️ | ⚠️ | ⚠️ | ~~暂时移除多Tab支持，仅保留一个编辑区~~ |
| ~~书签支持~~ | ❌ | ❌ | ❌ | ~~功能已删除~~ |
| ~~模板支持~~ | ❌ | ❌ | ❌ | ~~功能已删除~~ |

**图例**：
- ✅ 完全支持
- ⚠️ 部分支持或需要特殊处理
- ❌ 不支持

---

## 快速对比摘要

### 核心差异
| 维度 | MySQL | Redis | MongoDB |
|------|-------|-------|---------|
| **执行方式** | SQL语句 | 命令字符串 | JSON格式命令 |
| **数据结构** | 关系型表格 | 键值对 | 文档型JSON |
| **数据库概念** | 逻辑数据库 | DB编号(0-15) | 逻辑数据库 |
| **查询方式** | SQL查询 | 命令查询 | JSON命令 |
| **结果格式** | 表格数据 | 命令返回值 | 文档数组 |
| **语法高亮** | SQL | JavaScript | JavaScript |
| **结果展示** | 表格为主 | JSON为主 | JSON为主 |

### 功能完整性
- **MySQL**：⭐⭐⭐⭐⭐ (100%) - 功能最完整
- **Redis**：⭐⭐⭐⭐☆ (90%) - 核心功能完整，索引不支持（Redis特性）
- **MongoDB**：⭐⭐⭐⭐☆ (85%) - 核心功能完整，需要JSON格式（待优化）

---

## 二、详细功能差异分析

### 2.1 连接管理差异

#### MySQL
- **连接参数**：主机、端口、用户名、密码、数据库名
- **数据库选择**：通过数据库名选择，支持切换
- **连接方式**：TCP连接，支持SSL（待实现）
- **连接池**：支持连接复用

#### Redis
- **连接参数**：主机、端口、密码、DB编号（0-15）
- **数据库选择**：通过DB编号选择（0-15），共16个数据库
- **连接方式**：TCP连接
- **连接池**：支持连接复用
- **特殊说明**：database字段存储DB编号（字符串格式）

#### MongoDB
- **连接参数**：主机、端口、用户名、密码、数据库名（认证数据库）
- **数据库选择**：通过数据库名选择，支持切换
- **连接方式**：TCP连接，支持认证
- **连接池**：支持连接复用
- **特殊说明**：数据库名可作为认证数据库（authSource）

---

### 2.2 SQL/命令执行差异

#### MySQL
- **执行方式**：标准SQL语句
- **语句类型**：
  - 查询：SELECT、SHOW、DESCRIBE、DESC、EXPLAIN
  - 更新：INSERT、UPDATE、DELETE、CREATE、ALTER、DROP等
- **结果类型**：
  - `query`：查询结果，返回数据数组
  - `update`：更新结果，返回影响行数
- **数据库参数**：支持指定数据库执行（覆盖连接配置）
- **多语句支持**：支持多条SQL语句（multiStatements）

#### Redis
- **执行方式**：Redis命令（字符串解析）
- **命令格式**：`命令名 参数1 参数2 ...`（支持引号）
- **命令类型**：所有Redis命令（GET、SET、HGET、HSET、DEL等）
- **结果类型**：
  - `command`：统一为命令结果，返回命令返回值
- **数据库参数**：不支持（使用连接配置的DB编号）
- **命令解析**：支持带引号的参数（单引号/双引号）

#### MongoDB
- **执行方式**：JSON格式命令（当前实现）
- **命令格式**：JSON对象，包含 `op`（操作类型）和操作参数
- **语句类型**：
  - 查询：`{"op": "find", "collection": "users", "filter": {}}`
  - 更新：`{"op": "insertOne", "collection": "users", "document": {}}`
- **结果类型**：
  - `command`：统一为命令结果，根据操作类型确定影响行数
- **数据库参数**：支持指定数据库执行（覆盖连接配置）
- **特殊说明**：当前使用JSON格式，前端编辑器显示JavaScript语法（MongoDB Shell风格），但实际执行需要转换为JSON格式

---

### 2.3 数据库列表差异

#### MySQL
- **获取方式**：`SHOW DATABASES`
- **返回结果**：数据库名称数组
- **动态查询**：实时查询服务器上的数据库
- **权限控制**：根据用户权限显示可见数据库

#### Redis
- **获取方式**：固定返回0-15
- **返回结果**：`["0", "1", "2", ..., "15"]`
- **特殊说明**：Redis有16个逻辑数据库，编号0-15
- **实现方式**：不查询服务器，直接返回固定列表

#### MongoDB
- **获取方式**：`client.ListDatabases()`
- **返回结果**：数据库名称数组
- **动态查询**：实时查询服务器上的数据库
- **权限控制**：根据用户权限显示可见数据库

---

### 2.4 表/集合/Key列表差异

#### MySQL
- **获取方式**：`SHOW TABLES`
- **返回结果**：表名数组
- **数据库参数**：必须指定数据库
- **懒加载**：展开数据库节点时加载

#### Redis
- **获取方式**：`KEYS *` 或模式匹配
- **返回结果**：Key名数组
- **数据库参数**：使用连接配置的DB编号
- **模式匹配**：支持 `KEYS pattern`（如 `KEYS user:*`）
- **性能注意**：大量Key时可能较慢

#### MongoDB
- **获取方式**：`db.ListCollectionNames()`
- **返回结果**：集合名数组
- **数据库参数**：必须指定数据库
- **懒加载**：展开数据库节点时加载

---

### 2.5 表结构查询差异

#### MySQL
- **获取方式**：`DESCRIBE table_name` 或 `SHOW COLUMNS FROM table_name`
- **返回内容**：
  - 字段名（Field）
  - 类型（Type）
  - 是否为空（Null）
  - 键信息（Key）
  - 默认值（Default）
  - 额外信息（Extra）
- **数据格式**：结构化列信息数组

#### Redis
- **获取方式**：`TYPE key`、`TTL key`、`MEMORY USAGE key`
- **返回内容**：
  - Key类型（string、hash、list、set、zset等）
  - TTL（过期时间）
  - 值大小（内存占用）
- **数据格式**：Key信息对象

#### MongoDB
- **获取方式**：`db.collection.find().limit(5)` + 统计信息
- **返回内容**：
  - 文档示例（最多5个）
  - 字段统计信息
  - 索引信息（索引名、唯一性、键定义）
  - 文档总数
- **数据格式**：集合结构对象（包含多个子对象）

---

### 2.6 索引查询差异

#### MySQL
- **获取方式**：`SHOW INDEX FROM table_name`
- **返回内容**：
  - 索引名（Key_name）
  - 列名（Column_name）
  - 唯一性（Non_unique）
  - 索引类型（Index_type）
  - 排序方式（Collation）
- **数据格式**：索引信息数组

#### Redis
- **支持情况**：❌ 不支持索引
- **返回结果**：空数组 `[]`
- **说明**：Redis是键值存储，没有索引概念

#### MongoDB
- **获取方式**：包含在集合结构中（`GetCollectionStructure`）
- **返回内容**：
  - 索引名
  - 唯一性
  - 键定义（字段和排序方向）
- **数据格式**：索引信息数组（从集合结构中提取）
- **特殊说明**：不提供独立的索引查询接口，索引信息包含在表结构查询中

---

### 2.7 编辑器支持差异

#### MySQL
- **语言模式**：SQL语法高亮
- **默认内容**：`select 1;`
- **执行按钮**：`执行`
- **语法特性**：标准SQL语法，支持多语句

#### Redis
- **语言模式**：JavaScript语法高亮（用于命令编辑）
- **默认内容**：
  ```
  GET key
  SET key value
  HGET hash field
  ```
- **执行按钮**：`执行命令`
- **语法特性**：命令格式，支持引号参数

#### MongoDB
- **语言模式**：JavaScript语法高亮（MongoDB Shell语法，用于编辑）
- **默认内容**：
  ```
  db.collection.find({})
  // 示例：db.users.find({name: "John"})
  ```
- **执行按钮**：`执行查询`
- **语法特性**：编辑器显示MongoDB Shell语法，但实际执行需要转换为JSON格式（待实现自动转换）
- **当前限制**：需要手动输入JSON格式命令，不支持直接执行Shell语法

---

### 2.8 结果展示差异

#### MySQL
- **展示模式**：主要使用表格模式
- **数据格式**：二维数组（行×列）
- **列定义**：自动从查询结果生成
- **统计信息**：行数、执行时间
- **JSON模式**：可选，用于特殊查询结果

#### Redis
- **展示模式**：主要使用JSON模式
- **数据格式**：命令返回值（可能是字符串、数字、数组等）
- **统计信息**：执行时间（RowsAffected固定为1）
- **表格模式**：不适用（Redis结果不是表格结构）

#### MongoDB
- **展示模式**：JSON模式为主，表格模式可选
- **数据格式**：文档数组（BSON转换为JSON）
- **列定义**：查询结果为空时无列定义
- **统计信息**：文档数、执行时间
- **表格模式**：适用于简单查询结果

---

## 三、实现差异总结

### 3.1 核心差异点

1. **执行方式**
   - MySQL：标准SQL语句
   - Redis：命令字符串解析
   - MongoDB：JavaScript代码执行（待完善）

2. **数据库概念**
   - MySQL：逻辑数据库，包含表
   - Redis：逻辑数据库（0-15），包含Key
   - MongoDB：逻辑数据库，包含集合

3. **数据结构**
   - MySQL：关系型，表格结构
   - Redis：键值对，无固定结构
   - MongoDB：文档型，JSON结构

4. **查询方式**
   - MySQL：SQL查询
   - Redis：命令查询
   - MongoDB：查询表达式

5. **结果格式**
   - MySQL：表格数据
   - Redis：命令返回值
   - MongoDB：文档数组

### 3.2 统一处理策略

1. **结果类型统一**：
   - MySQL：`query`/`update`
   - Redis：`command`
   - MongoDB：`query`/`update`

2. **展示模式统一**：
   - 表格模式：适用于MySQL查询结果
   - JSON模式：适用于Redis命令结果和MongoDB查询结果

3. **编辑器统一**：
   - 根据数据库类型自动切换语言模式
   - 自动设置默认内容和按钮文本

4. **API接口统一**：
   - 所有数据库类型使用相同的API接口
   - 内部根据类型分发到不同的实现

---

## 四、功能完整性评估

### 4.1 MySQL功能完整性：⭐⭐⭐⭐⭐ (100%)
- ✅ 所有核心功能已实现
- ✅ 查询、更新、表结构、索引查询完整
- ✅ 编辑器支持完善

### 4.2 Redis功能完整性：⭐⭐⭐⭐☆ (90%)
- ✅ 核心功能已实现
- ⚠️ 索引查询不支持（Redis本身不支持）
- ✅ 命令执行、Key列表、Key信息查询完整

### 4.3 MongoDB功能完整性：⭐⭐⭐⭐☆ (85%)
- ✅ 核心功能已实现
- ⚠️ 查询执行需要JSON格式（不支持直接执行Shell语法）
- ✅ 集合列表、集合结构查询完整
- ⚠️ 索引查询包含在集合结构中（非独立接口）
- ⚠️ 需要实现Shell语法到JSON的自动转换

---

## 五、优化建议

### 5.1 短期优化

1. **MongoDB查询执行优化**（高优先级）
   - 当前需要JSON格式，用户体验不佳
   - 建议：实现MongoDB Shell语法到JSON的自动转换
   - 方案1：集成JavaScript引擎（如goja）解析Shell语法
   - 方案2：实现简单的语法解析器，支持常用操作

2. **Redis命令补全**
   - 添加Redis命令自动补全功能
   - 建议：在编辑器中集成Redis命令提示

3. **MongoDB查询补全**
   - 添加MongoDB Shell语法补全
   - 建议：在编辑器中集成MongoDB方法提示

### 5.2 长期优化

1. **统一查询接口**
   - 考虑设计统一的查询语言或抽象层
   - 当前各数据库使用不同的执行方式

2. **结果格式标准化**
   - 进一步统一结果格式，便于前端处理
   - 当前已有统一的结果类型，但数据格式仍有差异

3. **性能优化**
   - Redis Key列表查询（大量Key时）
   - MongoDB集合结构查询（大量文档时）

---

## 六、总结

### 6.1 功能支持情况

- **MySQL**：功能最完整，所有功能都已实现
- **Redis**：核心功能完整，索引查询不支持（Redis特性）
- **MongoDB**：核心功能完整，查询执行待完善

### 6.2 差异处理策略

- **统一接口**：所有数据库类型使用相同的API接口
- **类型分发**：内部根据数据库类型分发到不同实现
- **结果统一**：统一结果类型和展示模式
- **编辑器适配**：根据数据库类型自动适配编辑器

### 6.3 后续工作

1. 完善MongoDB查询执行功能
2. 优化Redis大量Key查询性能
3. 添加命令/语法补全功能
4. 统一结果格式处理

---

**结论**：不同数据库类型的功能差异主要体现在执行方式、数据结构、查询方式等方面，但通过统一的接口设计和类型分发，实现了良好的功能支持。MySQL功能最完整，Redis和MongoDB核心功能已实现，部分功能待完善。

