数据修改(改)
修改指定数据
修改徐强老师的性别
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-关系代数与单表查询
💬 评论