让 Claude Code 直接生成 CRUD 时,真正容易出问题的往往不是代码模板,而是它并不了解数据库里的真实字段。手动查询表结构再把 DDL 贴进上下文既繁琐,也可能遗漏信息。借助 MySQL MCP,可以让 Claude Code 按需读取开发库元数据,再基于准确的字段名和类型完成代码生成。
以前让 Claude Code 生成 CRUD 有个痛点:它不知道你的真实表结构。你得先 SHOW CREATE TABLE、复制 DDL、贴到 Prompt 里。偶尔忘了贴,它给你编一个字段名——代码跑起来就报错。
配好 MySQL MCP 之后,Claude Code 直接连数据库读表结构。你说"为 sys_product 表生成 CRUD",它自己去查字段、生成代码。这篇文章教你怎么配。
MCP(Model Context Protocol)是 Anthropic 推出的开放协议,相当于 Claude Code 的插件系统。通过 MCP Server,Claude Code 能连接数据库、文件系统、GitHub、Slack 这些外部数据源。
本文以 MySQL 为例。配好后 Claude Code 直接读真实表结构生成代码——不会编列名,字段类型也跟数据库一致。
最简单的是用 claude mcp add 命令:
claude mcp add mysql-dev
-e MYSQL_HOST="127.0.0.1"
-e MYSQL_PORT="3306"
-e MYSQL_USER="dev_readonly"
-e MYSQL_PASS="your_password"
-e MYSQL_DB="admin_service"
-e ALLOW_INSERT_OPERATION="false"
-e ALLOW_UPDATE_OPERATION="false"
-e ALLOW_DELETE_OPERATION="false"
-- npx @benborla29/mcp-server-mysql
各参数含义:
mysql-dev:你自己起的名字,区分不同的 MCP ServerMYSQL_HOST/PORT/USER/PASS/DB:数据库连接信息ALLOW_*_OPERATION=false:禁止写操作——AI 只能读不能改npx @benborla29/mcp-server-mysql:MySQL MCP Server 的 npm 包如果只想当前项目生效:
claude mcp add -s project mysql-dev
-e MYSQL_HOST="127.0.0.1"
...
项目级配置写入 .mcp.json,不包含密码的配置可以随代码提交。密码让每个开发者自己设环境变量。
不想用命令行的话,手动编辑也行。
项目级配置(.mcp.json,放项目根目录):
{
"mcpServers": {
"mysql-dev": {
"command": "npx",
"args": ["-y", "@benborla29/mcp-server-mysql"],
"env": {
"MYSQL_HOST": "127.0.0.1",
"MYSQL_PORT": "3306",
"MYSQL_USER": "dev_readonly",
"MYSQL_PASS": "${MYSQL_PWD}",
"MYSQL_DB": "admin_service",
"ALLOW_INSERT_OPERATION": "false",
"ALLOW_UPDATE_OPERATION": "false",
"ALLOW_DELETE_OPERATION": "false"
}
}
}
}
密码用 ${MYSQL_PWD} 引用环境变量,避免硬编码。每个开发者在自己的 ~/.bashrc 里设:
export MYSQL_PWD="your_actual_password"
如果想在所有项目里用同一个数据库连接,把上面的 JSON 放到
~/.claude.json(全局配置),就不用每个项目都配一遍。
claude mcp list # 列出所有 MCP Server
claude mcp get mysql-dev # 查看详情
Claude Code 里执行 /mcp 也行。状态显示 "Connected" 就说明连上了。
之前在 Skills 那篇里讲了 Skills 怎么标准化 CRUD 流程。配上 MCP 之后,效果更好:
> 帮我查一下 sys_product 表有哪些字段,然后生成完整 CRUD
Claude Code 自动通过 MCP 连数据库,执行 SHOW COLUMNS FROM sys_product,拿到真实字段名和类型,再按 Skill 定义的流程生成代码。
全程不需要你手动查表、复制 DDL、贴到 Prompt 里。而且生成的代码直接用真实列名——不会出现字段名对不上的低级错误。
建一个只读数据库账号:
CREATE USER 'dev_readonly'@'localhost' IDENTIFIED BY 'strong_password';
GRANT SELECT ON admin_service.* TO 'dev_readonly'@'localhost';
FLUSH PRIVILEGES;
只给 SELECT。即使 MCP 配置里写操作开关忘了设 false,AI 也动不了数据——数据库层面就没给权限。
密码用环境变量:配置里写 ${MYSQL_PWD},实际密码存 ~/.bashrc 里。
写操作显式关闭:虽然默认就是 false,但显式写一遍更安全——万一哪天默认行为变了,你的配置扛得住。
绝对不要连生产库:MCP 连开发库或只读从库。连接生产数据库的后果不需要我多说。
连不上:先手动 mysql -h 127.0.0.1 -u dev_readonly -p 确认能连上。能连上的话检查 MCP 配置里的 host/port/user/pass/db 对不对。
启动超时:npx 第一次下载包比较慢,等一分钟。或者先全局安装 npm install -g @benborla29/mcp-server-mysql,配置里 command 用 mcp-server-mysql(不用 npx)。
查不到数据:确认数据库名没错、用户有该库的 SELECT 权限。
配错了想重来:claude mcp remove mysql-dev 移除,然后重新 claude mcp add。
claude mcp add 命令一键配置配一次,以后每次生成 CRUD 都不用手动查表结构了。