关于 mysql
面向 MySQL 的参考技能,涵盖表结构、查询、故障排查和运维实践,并说明与 PostgreSQL 的差异及应改用其他数据库技能的情况。
主要功能
- 01表定义示例
- 02常见查询模式
- 03MySQL 与 PostgreSQL 差异
- 04查询反模式指引
- 05故障排查参考
适用场景
- 01设计 MySQL 表和索引
- 02编写分页与连接查询
- 03诊断慢查询或死锁
- 04选择适用的数据库技能
MCP 相关
README 提示使用 `mcp__documentation__fetch_docs` 并指定 technology 为 `mysql`,获取完整文档。
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ claude-dev-suite/ claude-dev-suite --skill mysql安装后在 Claude Code 中输入/mysql确认已加载。
附带文件quick-ref/indexes.mdquick-ref/queries.md
详细介绍
MySQL 核心知识
深入了解:使用
mcp__documentation__fetch_docs,并将 technology 设为mysql,以获取全面文档。
表定义
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
is_active BOOLEAN DEFAULT TRUE,
INDEX idx_email (email),
INDEX idx_created (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
常见查询
-- Pagination
SELECT * FROM users
WHERE is_active = TRUE
ORDER BY created_at DESC
LIMIT 20 OFFSET 0;
-- Join
SELECT u.*, COUNT(p.id) as post_count
FROM users u
LEFT JOIN posts p ON p.user_id = u.id
GROUP BY u.id;
-- Upsert
INSERT INTO users (email, name)
VALUES (?, ?)
ON DUPLICATE KEY UPDATE name = VALUES(name);
与 PostgreSQL 的主要区别
| 特性 | MySQL | PostgreSQL |
|---|---|---|
| 自动 ID | AUTO_INCREMENT | SERIAL |
| 布尔值 | TINYINT(1) | BOOLEAN |
| 插入或更新 | ON DUPLICATE KEY | ON CONFLICT |
| JSON | JSON | JSONB(可建立索引) |
何时不应使用此技能
- PostgreSQL 专属功能 - 对于 JSONB、数组和窗口函数,请使用
postgresql技能 - NoSQL 操作 - 对于文档型/键值存储,请使用
mongodb或redis技能 - Oracle 数据库 - 对于 Oracle 专属功能,请使用
oracle技能 - SQL Server - 对于 T-SQL 和 SQL Server 功能,请使用
sqlserver技能 - ORM 抽象 - 请使用特定框架的技能(Prisma、TypeORM、Sequelize)
反模式
| 反模式 | 问题 | 解决方案 |
|---|---|---|
在生产环境中使用 SELECT * | 传输不必要的数据,影响性能 | 明确指定所需列 |
UPDATE/DELETE 缺少 WHERE | 意外修改所有行 | 始终包含 WHERE 子句 |
| JOIN/WHERE 列缺少索引 | 全表扫描,查询缓慢 | 为频繁查询的列添加索引 |
| 对事务数据使用 MyISAM | 不支持事务,采用表级锁 | 使用 InnoDB 引擎 |
LIKE '%pattern' | 无法使用索引,会进行全表扫描 | 使用 LIKE 'pattern%' 或全文搜索 |
大型表缺少 LIMIT | 可能导致应用崩溃 | 始终对结果分页 |
对频繁变化的值使用 ENUM | 添加值需要执行 ALTER TABLE | 改用查找表 |
| 缺少外键 | 数据完整性问题 | 定义正确的 FK 约束 |
| N+1 查询问题 | 循环中每行执行一次查询 | 使用 JOIN 或批量查询 |
| 未使用预处理语句 | 存在 SQL 注入风险,性能较差 | 使用参数化查询 |
快速故障排除
| 问题 | 诊断 | 修复 |
|---|---|---|
| 查询缓慢 | EXPLAIN SELECT ... | 添加索引、重写查询、分析执行计划 |
| CPU 使用率高 | 使用 SHOW PROCESSLIST 查找慢查询 | 优化耗时最多的查询,添加索引 |
| 达到连接数上限 | SHOW STATUS LIKE 'Threads_connected' | 增加 max_connections,使用连接池 |
| 锁等待超时 | 检查 SHOW ENGINE INNODB STATUS | 缩短事务时间,优化查询 |
| 磁盘空间已满 | SELECT table_schema, SUM(data_length+index_length) FROM information_schema.tables GROUP BY 1 | 归档旧数据,优化表 |
| 复制延迟 | SHOW SLAVE STATUS | 增加资源,调整 binlog 设置 |
| 表损坏 | CHECK TABLE table_name | 运行 REPAIR TABLE 或从备份恢复 |
| 死锁 | 检查错误日志和 SHOW ENGINE INNODB STATUS | 缩小事务范围,按相同顺序访问表 |
参考文档
评论
支持 Markdown