返回顶部
M

MySQLMySQL查询编写

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

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

MySQL

快速参考

主题文件
索引设计深入探讨indexes.md
事务与锁机制
transactions.md | | 查询优化 | queries.md | | 生产环境配置 | production.md |

字符集陷阱

  • - utf8 存在缺陷——仅支持3字节,无法存储表情符号;始终使用 utf8mb4
  • utf8mb4unicodeci 用于不区分大小写的排序;utf8mb4_bin 用于精确字节比较
  • JOIN 操作中排序规则不匹配会严重影响性能——确保表间排序规则一致
  • 连接字符集必须匹配:SET NAMES utf8mb4 或连接字符串参数
  • utf8mb4 列上的索引更大——可能触及索引大小限制;考虑使用前缀索引

与 PostgreSQL 的索引差异

  • - 不支持部分索引——无法在索引定义中使用 WHERE active = true
  • MySQL 8.0.13 之前不支持表达式索引——在此之前必须使用生成列
  • TEXT/BLOB 需要前缀长度:INDEX (description(100))——缺少长度会报错
  • 不支持覆盖索引的 INCLUDE——将列添加到索引本身:INDEX (a, b, c) 以覆盖 c
  • 仅 InnoDB 自动为外键创建索引——在假设前需确认存储引擎

UPSERT 模式

  • - INSERT ... ON DUPLICATE KEY UPDATE——非标准 SQL;需要唯一键冲突
  • 使用 LASTINSERTID() 获取自增值——没有像 PostgreSQL 那样的 RETURNING 子句
  • REPLACE INTO 先删除后插入——会改变自增 ID,触发 DELETE 级联
  • 检查受影响行数:1 表示插入,2 表示更新(反直觉)

锁机制陷阱

  • - SELECT ... FOR UPDATE 锁定行——但间隙锁可能锁定超出预期的范围
  • InnoDB 使用临键锁——防止幻读但可能导致死锁
  • 锁等待超时默认 50 秒——通过 innodblockwait_timeout 调整
  • MySQL 8+ 支持 FOR UPDATE SKIP LOCKED——队列模式
  • InnoDB 默认隔离级别为可重复读,而非 PostgreSQL 的读已提交
  • 死锁是预期行为——代码必须捕获并重试,而非直接失败

GROUP BY 严格性

  • - MySQL 5.7+ 默认 sqlmode 包含 ONLYFULLGROUPBY
  • 非聚合列必须包含在 GROUP BY 中——不同于旧版 MySQL 的宽松模式
  • 当确定值相同时,使用 ANYVALUE(column) 消除错误
  • 检查旧数据库的 sqlmode——行为可能不同

InnoDB vs MyISAM

  • - 始终使用 InnoDB——支持事务、行级锁、外键、崩溃恢复
  • MyISAM 仍是一些系统表的默认引擎——不要用于应用数据
  • 检查引擎:SHOW TABLE STATUS——使用 ALTER TABLE ... ENGINE=InnoDB 转换
  • JOIN 中混合引擎可以工作,但会失去事务保证

查询特性

  • - LIMIT offset, count 与 PostgreSQL 的 LIMIT count OFFSET offset 顺序不同
  • != 和 <> 都有效;推荐使用 <> 以符合 SQL 标准
  • 不支持事务性 DDL——ALTER TABLE 立即提交,无法回滚
  • 布尔类型为 TINYINT(1)——TRUE/FALSE 只是 1/0
  • 两个参数时使用 IFNULL(a, b) 替代 COALESCE——虽然 COALESCE 也可用

连接管理

  • - waittimeout 会关闭空闲连接——默认 8 小时;连接池可能无法感知
  • maxconnections 默认 151——通常过低;每个连接都消耗内存
  • 连接池:所有应用实例的总连接数不要超过 max_connections
  • 使用 SHOW PROCESSLIST 查看活动连接——使用 KILL 终止长时间运行的连接

复制注意事项

  • - 基于语句的复制可能因非确定性函数而中断——UUID()、NOW()
  • 基于行的复制更安全但带宽消耗更大——MySQL 8 默认使用
  • 只读副本存在延迟——在依赖副本读取前检查 SecondsBehindMaster
  • 不要写入只读副本——通常为只读,但需确认

性能

  • - EXPLAIN ANALYZE 仅在 MySQL 8.0.18+ 中可用——旧版本仅支持 EXPLAIN,不显示实际执行时间
  • MySQL 8 中移除了查询缓存——不要依赖它;在应用层进行缓存
  • 对碎片化表使用 OPTIMIZE TABLE——会锁定表;大表使用 pt-online-schema-change
  • innodbbufferpool_size——专用数据库服务器设置为内存的 70-80%

标签

skill ai

通过对话安装

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

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 mysql-1776327185 技能

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

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

通过命令行安装

skillhub install mysql-1776327185

下载

⬇ 下载 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
返回顶部