数据修改(改)

修改指定数据

修改徐强老师的性别

UPDATE 教师 SET 性别='女' WHERE 编号='T013'

可见 不一定要指定主键才能修改 指定列名就行了 where 列名=‘’

UPDATE 教师 SET 性别='男' WHERE 姓名='徐强'

无论是用编号标识还是用姓名标识 where中的内容只要能确定该条记录就可

对一组数据进行有规律的修改

UPDATE 选课成绩 SET 成绩=成绩*0.9

SELECT * FROM 选课成绩

挑选某些数据进行修改

更新学院电话 where后面是判断 前面是执行要求

把长度小于等于8的学院电话前面加上027

UPDATE 学院 SET 学院电话='027-'+学院电话 WHERE LEN(学院电话)<=8

补充:只改前几条

MySQL里update也能配order by和limit 比如把最早注册的三个用户激活

UPDATE 用户 SET 状态='已激活' ORDER BY 注册时间 ASC LIMIT 3

这条没写where limit控住了数量 但实际干活还是建议where加上条件 双保险

补充:跨表改 JOIN更新

要改的依据在另一张表里怎么办 比如把选了"数据库"这门课的所有人成绩打9折

课程名在课程表 成绩在选课成绩表 两张表这就得连接着改

UPDATE 选课成绩 c JOIN 课程 k ON c.课程编号=k.编号
SET c.成绩=c.成绩*0.9
WHERE k.课程名='数据库'

UPDATE后面直接跟JOIN ON里写连接条件 SET里指名改哪张表的列 多表联动修改全靠这一手

补充:批量打等级 CASE WHEN

按分数段一次性把等级列全填好 不用一行一行update

UPDATE 选课成绩 SET 等级=
CASE
    WHEN 成绩>=90 THEN '优秀'
    WHEN 成绩>=80 THEN '良好'
    WHEN 成绩>=60 THEN '及格'
    ELSE '不及格'
END

CASE WHEN扫一遍表 每行按自己的成绩对号入座 一条语句全表等级齐活

血泪教训

改数据之前 先拿同样的WHERE条件跑一遍SELECT 看看圈中的到底是不是要改的那几行

确认了再把SELECT换成UPDATE 手滑的成本天差地别

最容易出的事故就是UPDATE忘写WHERE 一回车全表都改了

(真手滑了立刻停 别提交事务 想办法用备份或者binlog往回捞)


⬅️ 08-数据删除(删) 🏠 00-数据库 ➡️ 10-关系代数与单表查询