mysql
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseMySQL Core Knowledge
MySQL 核心知识
Deep Knowledge: Usewith technology:mcp__documentation__fetch_docsfor comprehensive documentation.mysql
深度知识:调用工具并指定技术栈为mcp__documentation__fetch_docs可获取完整文档。mysql
Table Definition
表定义
sql
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;sql
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;Common Queries
常用查询
sql
-- 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);sql
-- 分页
SELECT * FROM users
WHERE is_active = TRUE
ORDER BY created_at DESC
LIMIT 20 OFFSET 0;
-- 关联查询
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);Key Differences from PostgreSQL
与 PostgreSQL 的核心差异
| Feature | MySQL | PostgreSQL |
|---|---|---|
| Auto ID | | |
| Boolean | | |
| Upsert | | |
| JSON | | |
| 特性 | MySQL | PostgreSQL |
|---|---|---|
| 自增ID | | |
| 布尔类型 | | |
| 写入更新 | | |
| JSON类型 | | |
When NOT to Use This Skill
何时不应使用本技能
- PostgreSQL-specific features - Use skill for JSONB, arrays, window functions
postgresql - NoSQL operations - Use or
mongodbskills for document/key-value storesredis - Oracle database - Use skill for Oracle-specific features
oracle - SQL Server - Use skill for T-SQL and SQL Server features
sqlserver - ORM abstractions - Use framework-specific skills (Prisma, TypeORM, Sequelize)
- PostgreSQL 专属特性:如需使用 JSONB、数组、窗口函数等 PostgreSQL 特性,请使用 技能
postgresql - NoSQL 操作:如需操作文档/键值存储,请使用 或
mongodb技能redis - Oracle 数据库:如需使用 Oracle 专属特性,请使用 技能
oracle - SQL Server:如需使用 T-SQL 或 SQL Server 特性,请使用 技能
sqlserver - ORM 抽象操作:请使用对应框架的相关技能(Prisma、TypeORM、Sequelize)
Anti-Patterns
反模式
| Anti-Pattern | Issue | Solution |
|---|---|---|
| Transfers unnecessary data, performance impact | Specify needed columns explicitly |
Missing | Modifies all rows unintentionally | Always include WHERE clause |
| Missing indexes on JOIN/WHERE columns | Full table scans, slow queries | Add indexes on frequently queried columns |
| MyISAM for transactional data | No transaction support, table-level locking | Use InnoDB engine |
| Cannot use index, full scan | Use |
Missing | Can crash application | Always paginate results |
Using | Requires ALTER TABLE to add values | Use lookup table instead |
| Missing foreign keys | Data integrity issues | Define proper FK constraints |
| N+1 query problem | One query per row in loop | Use JOINs or batch queries |
| Not using prepared statements | SQL injection risk, slower performance | Use parameterized queries |
| 反模式 | 问题 | 解决方案 |
|---|---|---|
生产环境使用 | 传输不必要数据,影响性能 | 明确指定需要查询的列 |
UPDATE/DELETE 语句缺少 | 意外修改全表数据 | 必须添加 WHERE 子句 |
| JOIN/WHERE 关联列缺少索引 | 全表扫描,查询缓慢 | 为高频查询的列添加索引 |
| 事务性数据使用 MyISAM 引擎 | 不支持事务,表级锁性能差 | 使用 InnoDB 引擎 |
使用 | 无法命中索引,触发全表扫描 | 使用 |
大表查询缺少 | 可能导致应用崩溃 | 始终对结果进行分页 |
频繁变更的属性使用 | 添加可选值需要执行 ALTER TABLE | 改用关联 lookup 表 |
| 缺少外键约束 | 存在数据一致性问题 | 定义合理的外键约束 |
| N+1 查询问题 | 循环中逐行查询数据 | 使用 JOIN 或批量查询 |
| 不使用预编译语句 | 存在 SQL 注入风险,性能更低 | 使用参数化查询 |
Quick Troubleshooting
快速排查问题
| Problem | Diagnostic | Fix |
|---|---|---|
| Slow queries | | Add indexes, rewrite query, analyze execution plan |
| High CPU usage | | Optimize top queries, add indexes |
| Connection limit reached | | Increase max_connections, use connection pooling |
| Lock wait timeout | Check | Reduce transaction time, optimize queries |
| Disk space full | | Archive old data, optimize tables |
| Replication lag | | Increase resources, tune binlog settings |
| Table corruption | | Run |
| Deadlocks | Check error log and | Reduce transaction scope, access tables in same order |
| 问题 | 诊断方法 | 解决方案 |
|---|---|---|
| 查询缓慢 | 执行 | 添加索引,重写查询,分析执行计划 |
| CPU 使用率过高 | 执行 | 优化Top查询,添加索引 |
| 达到连接数上限 | 执行 | 调大 max_connections 参数,使用连接池 |
| 锁等待超时 | 查看 | 缩短事务执行时间,优化查询 |
| 磁盘空间不足 | 执行 | 归档旧数据,优化表 |
| 主从复制延迟 | 执行 | 提升资源配置,调整 binlog 设置 |
| 表损坏 | 执行 | 执行 |
| 死锁 | 查看错误日志和 | 缩小事务范围,按相同顺序访问表 |
Reference Documentation
参考文档
- Indexes
- JSON
- 索引
- JSON