mysql如何更新记录_mysql update语句条件过滤

张开发
2026/4/21 3:52:30 15 分钟阅读

分享文章

mysql如何更新记录_mysql update语句条件过滤
UPDATE语句必须带WHERE条件否则会无差别修改全表应先用SELECT验证目标行启用SQL_SAFE_UPDATES避免函数作用于索引字段NULL需用IS NULL判断并注意外键与触发器的隐式影响。UPDATE 语句必须带 WHERE否则全表覆写不加 WHERE 的 UPDATE 是最常见误操作来源——它会无差别修改整张表所有行。比如执行 UPDATE users SET status inactive;没加条件结果所有用户都被设为 inactive。实际开发中只要不是明确要批量更新全部数据极少见就必须写 WHERE。MySQL 不会主动阻止你删光或改光它只忠实地执行你的命令。上线前用 SELECT 先验证条件比如要改 UPDATE orders SET paid 1 WHERE id 123;先跑 SELECT * FROM orders WHERE id 123; 确认目标存在且唯一测试环境务必开启 SQL_SAFE_UPDATES1默认开启它会拒绝没有主键/索引字段参与 WHERE 的 UPDATE避免扫全表生产环境执行前建议加事务包裹BEGIN; UPDATE ... ; SELECT ROW_COUNT();确认影响行数合理再 COMMITWHERE 条件里别用函数或表达式过滤主键/索引字段想按时间范围更新别写 WHERE DATE(created_at) 2024-05-01。这会让 MySQL 无法使用 created_at 上的索引被迫全表扫描大表可能卡死。正确做法是把函数移到右边让左边保持字段原样? 错误WHERE YEAR(created_at) 2024 → 索引失效? 正确WHERE created_at 2024-01-01 AND created_at → 可走索引复合索引要注意顺序如果 (status, created_at) 有索引WHERE status pending AND created_at 2024-05-01 能命中但反过来 WHERE created_at 2024-05-01 单独用就用不上多字段更新时NULL 值要显式判断不能用 NULL很多人写 WHERE field NULL结果一条都匹配不到——因为 NULL 在 SQL 里不等于任何值包括它自己。这是标准 SQL 行为MySQL 严格遵守。 通义听悟 阿里云通义听悟是聚焦音视频内容的工作学习AI助手依托大模型帮助用户记录、整理和分析音视频内容体验用大模型做音视频笔记、整理会议记录。

更多文章