3. 修改数据 UPDATE
语法:
语法
UPDATE 表名
SET 字段1 = 值1, 字段2 = 值2, ...
[WHERE 条件];sql
-- A. 把学号021的姓名改为"李雷"
UPDATE student SET Sname = '李雷' WHERE Sno = '021';
-- B. 把学号021的姓名和性别一起改
UPDATE student
SET Sname = '小昭', Ssex = '女'
WHERE Sno = '021';
-- C. 没有 WHERE:所有学生班级都改成01(危险!)
UPDATE student SET class = '01';⚠️ 致命陷阱:UPDATE 省略 WHERE 会修改整张表每一行!机房练习时务必先写 WHERE 再补全 SET,养成"先定位、再修改"的习惯。
📝 本节例题
以下例题均基于 教学实例 库(student / course / sc / teacher / grades / dept / emp),开始前先执行 USE 教学实例;。建议先自己写一遍,再展开答案对照。
例 1
把 04 号课程(计算机)的授课教师改为 04 号赵老师。
查看参考答案(可复制)
sql
UPDATE course SET Tno = '04' WHERE Cno = '04';💡 UPDATE 一定要带 WHERE,否则整表被改。
例 2
给数学(02 号课程)的所有成绩加 5 分,要求用子查询定位课程号。
查看参考答案(可复制)
sql
UPDATE sc
SET score = score + 5
WHERE Cno = (SELECT Cno FROM course WHERE Cname = '数学');💡 子查询在别的表上取值是允许的;先跑一遍 SELECT 版本确认影响行数。
例 3
给张三丰(销售总监)的直属下属每人加薪 500 元。
查看参考答案(可复制)
sql
UPDATE emp
SET salary = salary + 500
WHERE managerid = (SELECT id FROM (SELECT id FROM emp WHERE name = '张三丰') t);💡 直接写 WHERE managerid = (SELECT id FROM emp WHERE name='张三丰') 会报 1093 错误:不能一边查一边改同一张表。外面再套一层派生表即可绕过。