MySQL Core Knowledge
Deep Knowledge: Use mcp__documentation__fetch_docs with technology: mysql for comprehensive documentation.
Table Definition
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
-- 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);
Key Differences from PostgreSQL
| Feature |
MySQL |
PostgreSQL |
| Auto ID |
AUTO_INCREMENT |
SERIAL |
| Boolean |
TINYINT(1) |
BOOLEAN |
| Upsert |
ON DUPLICATE KEY |
ON CONFLICT |
| JSON |
JSON |
JSONB (indexed) |
When NOT to Use This Skill
- PostgreSQL-specific features - Use
postgresql skill for JSONB, arrays, window functions
- NoSQL operations - Use
mongodb or redis skills for document/key-value stores
- Oracle database - Use
oracle skill for Oracle-specific features
- SQL Server - Use
sqlserver skill for T-SQL and SQL Server features
- ORM abstractions - Use framework-specific skills (Prisma, TypeORM, Sequelize)
Anti-Patterns
| Anti-Pattern |
Issue |
Solution |
SELECT * in production |
Transfers unnecessary data, performance impact |
Specify needed columns explicitly |
Missing WHERE on UPDATE/DELETE |
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 |
LIKE '%pattern' |
Cannot use index, full scan |
Use LIKE 'pattern%' or fulltext search |
Missing LIMIT on large tables |
Can crash application |
Always paginate results |
Using ENUM for frequently changing values |
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 |
Quick Troubleshooting
| Problem |
Diagnostic |
Fix |
| Slow queries |
EXPLAIN SELECT ... |
Add indexes, rewrite query, analyze execution plan |
| High CPU usage |
SHOW PROCESSLIST to find slow queries |
Optimize top queries, add indexes |
| Connection limit reached |
SHOW STATUS LIKE 'Threads_connected' |
Increase max_connections, use connection pooling |
| Lock wait timeout |
Check SHOW ENGINE INNODB STATUS |
Reduce transaction time, optimize queries |
| Disk space full |
SELECT table_schema, SUM(data_length+index_length) FROM information_schema.tables GROUP BY 1 |
Archive old data, optimize tables |
| Replication lag |
SHOW SLAVE STATUS |
Increase resources, tune binlog settings |
| Table corruption |
CHECK TABLE table_name |
Run REPAIR TABLE or restore from backup |
| Deadlocks |
Check error log and SHOW ENGINE INNODB STATUS |
Reduce transaction scope, access tables in same order |
Reference Documentation