返回顶部
M

MySQL

Write correct MySQL queries with proper character sets, indexing, transactions, and production patterns.

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 1.0.1
安全检测
已通过
3,442
下载量
6
收藏
概述
安装方式
版本历史

MySQL

## Quick Reference | Topic | File | |-------|------| | Index design deep dive | `indexes.md` | | Transactions and locking | `transactions.md` | | Query optimization | `queries.md` | | Production config | `production.md` | ## Character Set Traps - `utf8` is broken—only 3 bytes, can't store emoji; always use `utf8mb4` - `utf8mb4_unicode_ci` for case-insensitive sorting; `utf8mb4_bin` for exact byte comparison - Collation mismatch in JOINs kills performance—ensure consistent collation across tables - Connection charset must match: `SET NAMES utf8mb4` or connection string parameter - Index on utf8mb4 column larger—may hit index size limits; consider prefix index ## Index Differences from PostgreSQL - No partial indexes—can't `WHERE active = true` in index definition - No expression indexes until MySQL 8.0.13—must use generated columns before that - TEXT/BLOB needs prefix length: `INDEX (description(100))`—without length, error - No INCLUDE for covering—add columns to index itself: `INDEX (a, b, c)` to cover c - Foreign keys auto-indexed only in InnoDB—verify engine before assuming ## UPSERT Patterns - `INSERT ... ON DUPLICATE KEY UPDATE`—not standard SQL; needs unique key conflict - `LAST_INSERT_ID()` for auto-increment—no RETURNING clause like PostgreSQL - `REPLACE INTO` deletes then inserts—changes auto-increment ID, triggers DELETE cascade - Check affected rows: 1 = inserted, 2 = updated (counter-intuitive) ## Locking Traps - `SELECT ... FOR UPDATE` locks rows—but gap locks may lock more than expected - InnoDB uses next-key locking—prevents phantom reads but can cause deadlocks - Lock wait timeout default 50s—`innodb_lock_wait_timeout` for adjustment - `FOR UPDATE SKIP LOCKED` exists in MySQL 8+—queue pattern - InnoDB default isolation is REPEATABLE READ, not READ COMMITTED like PostgreSQL - Deadlocks are expected—code must catch and retry, not just fail ## GROUP BY Strictness - `sql_mode` includes `ONLY_FULL_GROUP_BY` by default in MySQL 5.7+ - Non-aggregated columns must be in GROUP BY—unlike old MySQL permissive mode - `ANY_VALUE(column)` to silence error when you know values are same - Check sql_mode on legacy databases—may behave differently ## InnoDB vs MyISAM - Always use InnoDB—transactions, row locking, foreign keys, crash recovery - MyISAM still default for some system tables—don't use for application data - Check engine: `SHOW TABLE STATUS`—convert with `ALTER TABLE ... ENGINE=InnoDB` - Mixed engines in JOINs work but lose transaction guarantees ## Query Quirks - `LIMIT offset, count` different order than PostgreSQL's `LIMIT count OFFSET offset` - `!=` and `<>` both work; prefer `<>` for SQL standard - No transactional DDL—`ALTER TABLE` commits immediately, can't rollback - Boolean is `TINYINT(1)`—`TRUE`/`FALSE` are just 1/0 - `IFNULL(a, b)` instead of `COALESCE` for two args—though COALESCE works ## Connection Management - `wait_timeout` kills idle connections—default 8 hours; pooler may not notice - `max_connections` default 151—often too low; each uses memory - Connection pools: don't exceed max_connections across all app instances - `SHOW PROCESSLIST` to see active connections—kill long-running with `KILL <id>` ## Replication Awareness - Statement-based replication can break with non-deterministic functions—UUID(), NOW() - Row-based replication safer but more bandwidth—default in MySQL 8 - Read replicas have lag—check `Seconds_Behind_Master` before relying on replica reads - Don't write to replica—usually read-only but verify ## Performance - `EXPLAIN ANALYZE` only in MySQL 8.0.18+—older versions just EXPLAIN without actual times - Query cache removed in MySQL 8—don't rely on it; cache at application level - `OPTIMIZE TABLE` for fragmented tables—locks table; use pt-online-schema-change for big tables - `innodb_buffer_pool_size`—set to 70-80% of RAM for dedicated DB server

标签

skill ai

通过对话安装

该技能支持在以下平台通过对话安装:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 mysql-1776327185 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 mysql-1776327185 技能

通过命令行安装

skillhub install mysql-1776327185

下载 Zip 包

⬇ 下载 MySQL v1.0.1

文件大小: 5.26 KB | 发布时间: 2026-4-17 15:34

v1.0.1 最新 2026-4-17 15:34
Added auxiliary files (indexes, transactions, queries, production), Quick Reference table, expanded content

Archiver·手机版·闲社网·闲社论坛·羊毛社区· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2025 闲社网·线报更新论坛·羊毛分享社区·http://xianshe.com

p2p_official_large
返回顶部