引言
在大模型应用开发中,MCP(Model Context Protocol)正成为连接 AI 与本地数据的关键桥梁。本文将基于 MySQL 数据库,拆解如何通过 MCP 协议让 AI 直接操作关系型数据库,涵盖环境构建、架构设计、数据初始化及自然语言查询的全流程。
一、MCP 服务器发现与配置
在交互前,需确立连接协议与服务源。开发者可在 MCP 服务器市场中检索 mysql 关键字获取相关资源。选中服务后,界面会展示详细的配置详情页,提供后续在客户端(如 VSCode 扩展)中所需的 JSON 结构与参数说明,包括环境依赖和启动命令。
二、数据库基础设施构建
配置 MCP 连接前,确保底层 MySQL 环境就绪。以下操作展示了如何从零开始构建名为 lanyun 的数据库实例。
2.1 创建数据库
通过管理工具连接 MySQL 实例,执行 DDL 命令。
CREATE DATABASE lanyun;
USE lanyun;
CREATE DATABASE 初始化命名空间,USE 切换会话上下文。基础配置:用户 root,端口 3306。
2.2 表结构设计
为验证复杂查询能力,设计三张核心表:users、products、orders。
-- 用户表
CREATE TABLE IF NOT EXISTS `users` (
`id` INT PRIMARY KEY AUTO_INCREMENT COMMENT '用户 ID',
`username` VARCHAR(50) NOT NULL UNIQUE COMMENT '用户名',
`email` VARCHAR(100) UNIQUE COMMENT '邮箱',
`phone` VARCHAR(20) UNIQUE COMMENT '手机号',
`age` TINYINT UNSIGNED COMMENT '年龄',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户信息表';
-- 商品表
CREATE TABLE IF NOT EXISTS `products` (
`id` INT PRIMARY KEY AUTO_INCREMENT COMMENT '商品 ID',
`name` VARCHAR(100) NOT NULL COMMENT '商品名称',
`price` DECIMAL(10,2) NOT NULL COMMENT '商品价格',
`stock` INT NOT NULL DEFAULT 0 COMMENT '库存',
`category` VARCHAR(50) COMMENT '商品分类',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品信息表';
-- 订单表
CREATE TABLE IF NOT EXISTS `orders` (
`id` INT PRIMARY KEY AUTO_INCREMENT COMMENT '订单 ID',
`user_id` INT NOT NULL COMMENT '用户 ID',
`product_id` INT NOT NULL COMMENT '商品 ID',
`quantity` INT NOT NULL DEFAULT 1 COMMENT '购买数量',
`total_price` DECIMAL(10,2) NOT NULL COMMENT '订单总价',
`status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态:1-待付款,2-已付款,3-已发货,4-已完成,5-已取消',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`),
FOREIGN KEY (`product_id`) REFERENCES `products`(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单信息表';
技术细节:使用 InnoDB 支持事务;utf8mb4 兼容 Emoji;价格用 DECIMAL 避免精度丢失;外键保证引用完整性。
2.3 初始化测试数据
预置模拟数据以便 MCP 检索。
插入 10 条用户记录:
INSERT INTO `users` (`username`,`email`,`phone`,`age`) VALUES
('zhangsan','[email protected]','13800138000',25),
('lisi','[email protected]','13800138001',30),
('wangwu','[email protected]','13800138002',22),
('zhaoliu','[email protected]','13800138003',28),
('sunqi','[email protected]','13800138004',35),
('zhouba','[email protected]','13800138005',26),
('wujian','[email protected]','13800138006',29),
('chenshi','[email protected]','13800138007',32),
('yangjiu','[email protected]','13800138008',24),
('huangshi','[email protected]','13800138009',31);
插入 8 条商品数据:
INSERT INTO `products` (`name`,`price`,`stock`,`category`) VALUES
('小米 14 Pro',4999.00,200,'手机'),
('华为 Mate 60 Pro',5999.00,150,'手机'),
('苹果 MacBook Pro',12999.00,80,'笔记本电脑'),
('联想拯救者 Y9000P',8999.00,100,'笔记本电脑'),
('大疆 Mini 4 Pro',3799.00,60,'无人机'),
('索尼 WH-1000XM5',2499.00,120,'耳机'),
('小米空气净化器 4 Pro',899.00,180,'智能家居'),
('美的电饭煲 5L',399.00,250,'家电');
插入 15 条订单数据:
INSERT INTO `orders` (`user_id`,`product_id`,`quantity`,`total_price`,`status`) VALUES
(1,1,1,4999.00,4),
(1,6,1,2499.00,2),
(2,2,1,5999.00,3),
(3,3,1,12999.00,1),
(4,4,1,8999.00,4),
(5,5,1,3799.00,2),
(6,7,2,1798.00,3),
(7,8,1,399.00,1),
(8,1,2,9998.00,4),
(9,2,1,5999.00,5),
(10,3,1,12999.00,2),
(2,6,1,2499.00,4),
(3,7,1,899.00,3),
(4,8,3,1197.00,1),
(5,5,2,7598.00,2);
此步骤隐式验证了外键约束。
2.4 数据验证
接入 MCP 前手动查询确认落盘。
SELECT * FROM `users` LIMIT 10;
结果应包含 ID、用户名等字段,确保数据健康。
三、MCP 连接配置与环境启动
在编辑器中配置 MCP 客户端,使其与 MySQL 通信。
3.1 JSON 配置详解
在配置文件输入以下 JSON,定义 mysql 服务器实例。
{
"mcpServers": {
"mysql": {
"command": "npx",
"args": ["-y", "@kevinwatt/mysql-mcp"],
"env": {
"MYSQL_HOST": "host",
"MYSQL_PORT": "3306",
"MYSQL_USER": "root",
"MYSQL_PASS": "passwd",
"MYSQL_DB": "lanyun"
}
}
}
}
参数解析:
command: 使用 Node.js 包执行器。args: 指定 MCP 中间件包名,负责将 AI 指令转化为 MySQL 协议。env: 关键部分,定义连接凭证。注意替换实际 IP 和密码。
3.2 服务连接确认
保存配置后,插件自动启动服务器。成功建立时会有明确反馈。系统会展示运行状态和可用工具列表,表明 AI 已具备操作数据库的能力。
四、AI 驱动的复杂数据查询
进入实际应用阶段,演示自然语言多表关联查询。
4.1 自然语言指令
发送请求:
1. 查询目标:用户姓名、手机号、购买的商品名称、订单状态、订单创建时间
2. 筛选条件:
- 用户年龄大于 28 岁
- 商品价格大于 3000 元
- 订单创建时间在 2025 年 1 月 1 日之后
- 订单状态不是'已取消'(status≠5)
3. 排序需求:先按用户年龄降序,再按订单创建时间升序
涉及三表 JOIN 及多重 WHERE 子句。
4.2 执行过程与工具调用
AI 接收指令后,先获取 Schema,构建查询逻辑。过程中可能调用 MCP 工具生成 Python 代码处理导出。
4.3 结果产出
AI 不仅执行查询,还利用 Python 环境将结果生成为 Excel 文件。数据结构清晰,符合查询要求。
4.4 SQL 逻辑反查
查看底层 SQL 代码验证准确性。
SELECT u.username AS 用户姓名, u.phone AS 手机号, p.name AS 商品名称, o.status AS 订单状态, o.create_time AS 订单创建时间, u.age AS 用户年龄
FROM orders o
JOIN users u ON o.user_id = u.id
JOIN products p ON o.product_id = p.id
WHERE u.age > 28
AND p.price > 3000
AND o.create_time >= '2025-01-01 00:00:00'
AND o.status != 5
ORDER BY u.age DESC, o.create_time ASC;
逻辑严密,JOIN 正确,WHERE 精准对应条件,ORDER BY 实现复合排序。对比数据库直接查询结果,数据完全一致,证明可靠性。
五、AI 驱动的数据写入操作
除了查询,MCP 同样支持写入。
5.1 插入指令
发送指令:
请基于 MySQL 数据库执行以下数据插入操作:
1. 目标表:`users`
2. 插入字段:`username`, `email`, `phone`, `age`
3. 插入数据:('qianer', ...), ('songsan', ...) 等 5 条记录
4. 执行要求:确保语法规范,返回受影响行数,若重复给出建议
5.2 执行反馈
MCP 转换为 INSERT 语句执行,界面反馈成功。
5.3 写入验证
回到数据库验证。新数据 ID 应从 11 开始。
SELECT * FROM `users` WHERE id >= 11;
结果显示 5 条新用户数据精确存入,字段对应正确。
总结
本流程展示了如何利用 MCP 协议实现从数据库搭建、配置编写到 AI 自然语言交互的完整闭环。MCP 协议降低了 AI 接入传统数据设施的门槛,使复杂的 SQL 编写和数据处理工作可以通过自然语言高效完成。

