SQL UPDATE/DELETE
学习修改删除 · 难度:入门 · +10XP
SQL UPDATE 和 DELETE 操作
数据不是一成不变的:学生换班了需要更新班级信息,用户注销了需要删除账户记录,商品涨价了需要批量调价。SQL 中的 UPDATE 用于修改已有数据,DELETE 用于删除数据。这两个操作与 INSERT 和 SELECT 一起构成了数据库的四大基本操作(CRUD:Create、Read、Update、Delete)。但需要格外小心,因为 UPDATE 和 DELETE 都直接修改数据,且不带 WHERE 条件时会作用于全表。
UPDATE 基本语法
UPDATE 表名
SET 列1 = 值1, 列2 = 值2, ...
WHERE 条件; -- 务必加上条件!
UPDATE 示例
-- 修改单个学生的分数
UPDATE students SET score = 90 WHERE name = '张三';
-- 批量提分:给分数低于80的所有学生加5分
UPDATE students SET score = score + 5 WHERE score < 80;
-- 同时更新多列
UPDATE students
SET score = 95, age = 21
WHERE id = 10;
-- 子查询更新:将低于平均分的学生标记为'需补考'
UPDATE students
SET status = '需补考'
WHERE score < (SELECT AVG(score) FROM students);
DELETE 基本语法
DELETE FROM 表名 WHERE 条件; -- 务必加上条件!
DELETE FROM 表名; -- 危险!删除所有行!
DELETE 示例
-- 删除指定学生
DELETE FROM students WHERE id = 10;
-- 删除分数低于60的学生
DELETE FROM students WHERE score < 60;
-- 使用子查询删除
DELETE FROM students
WHERE id IN (SELECT id FROM blacklist);
-- 删除所有记录(保留表结构)
DELETE FROM students;
安全操作规范
- 先 SELECT 后 UPDATE/DELETE:执行前先用同样的 WHERE 条件执行 SELECT,确认将要影响的行
- 始终使用 WHERE:除非你确定要操作全表,否则永远写上 WHERE 条件
- 使用事务保护:在关键操作前开启事务(BEGIN),确认无误后再 COMMIT
- 备份先行:生产环境操作前确认有最新备份
- LIMIT 限制:MySQL 支持 UPDATE/DELETE 加 LIMIT 限制影响行数
常见错误和预防
| 错误 | 后果 | 预防 |
|---|---|---|
| 忘记 WHERE | 更新/删除全表数据 | 先 SELECT 确认,开启事务 |
| WHERE 条件写错 | 影响范围不对 | 先用 COUNT(*) 确认行数 |
| 子查询引用错误 | 更新逻辑错误 | 单独测试子查询 |
| 无事务保护 | 误操作无法回滚 | 养成 BEGIN...COMMIT 习惯 |
实战任务
- 更新指定学生的分数
- 批量将不及格学生(score<60)的分数提高 10 分
- 删除指定 ID 的学生记录(先 SELECT 确认再 DELETE)