🗄️ 第三章 操作数据库-SQL的使用方法
📄 一句话概括

UPDATE 改表里已有的记录——一句【改哪列、改成什么、改谁】;忘写 WHERE 会改掉全表,是 SQL 界名场面级事故。

📝 本节和前面几节的关系

SELECT 只看不动;本节第一次【动真格】——1-4 的【更新成本低】(改一处处处对)、2-3 拆表的动机,全部落到这条命令上。

一、UPDATE 的语法骨架

UPDATE 表名
SET 列 = 新值, 列 = 新值, ...
WHERE 条件;

三段含义:

-- 准备块(没建表先跑 3-6 的准备块)

-- 把赵六的分数改成 70
UPDATE students SET score = 70 WHERE id = 4;

-- 一次改两列:王五调班并加分
UPDATE students SET class = 1, score = 88 WHERE id = 3;

二、WHERE 在 UPDATE 里的分量

查询时忘 WHERE 顶多查全表(浪费);UPDATE 忘 WHERE 是真灾难:

-- ⚠️ 危险演示(别在真数据上跑)
UPDATE students SET score = 100;    -- 没写 WHERE:全表 5 人全部变 100!
写法 影响范围
UPDATE ... WHERE id = 4; 1 行
UPDATE ... WHERE class = 2; 该班所有行
UPDATE ...;(无 WHERE) 全表

职业习惯:写 UPDATE 先写 WHERE 再回头补 SET;或先用同条件的 SELECT 看一眼【会改到谁】,确认无误再换成 UPDATE。

三、动手 Demo:改一步验一步

-- ① 先看要改谁
SELECT * FROM students WHERE id = 4;      -- 赵六 64

-- ② 改
UPDATE students SET score = 70 WHERE id = 4;

-- ③ 再验:64 变 70
SELECT * FROM students WHERE id = 4;

-- ④ 表达式更新:全体加 5 分(有 WHERE 的全表更新,是有意的)
UPDATE students SET score = score + 5 WHERE score IS NOT NULL;

-- ⑤ 改不存在的行:0 行受影响,不报错
UPDATE students SET score = 0 WHERE id = 999;

看到什么算成功:③从 64 变 70;④后除钱七外人人加 5(李四 97);⑤安静通过——UPDATE 改不到行不报错,只【0 行受影响】;改完没变化时先怀疑 WHERE 是不是没对上。

四、30 秒实验

试试用表达式改:UPDATE students SET score = score * 2 WHERE id = 1;——SET 右边能用旧值算新值(85 变 170)。工资普调、全场打折,全靠这一招。

五、常见误区

  1. "UPDATE 忘 WHERE 只是多改一点" —— 是改全表。真库上发生一次,简历上就有一行【某年某月某事故】。
  2. "WHERE 条件没对上会报错提醒我" —— 不会,安静地【0 行受影响】;以为改了其实没改,比报错更阴。
  3. "SET 一次只能改一列" —— 逗号隔开想改几列改几列。
自测三问(点开对答案) 1. UPDATE 的三段各管什么? **表名(在哪改)、SET(改哪列成什么)、WHERE(改谁)**。 2. 忘写 WHERE 的后果? **全表更新**——SQL 界名场面级事故。 3. UPDATE 影响不到任何行时会报错吗? **不会**,静默【0 行受影响】——改完没变化先查 WHERE。

相关笔记