# P13 13. 基础-SQL-DML-更新和删除

> 本页是学习笔记，不等同于视频逐字稿。原声字幕未取得（匿名接口字幕轨为空且需登录，未使用任何账号），也没有逐句讲解记录；讲义只按节与页码对应，切点未逐句确证。

> 以同版讲义的公开镜像核对章节与页码（镜像非官方出品）；非逐字稿，示例为原创补充。

## P13 13. 基础-SQL-DML-更新和删除

- 原视频：https://www.bilibili.com/video/BV1Kr4y1i7ru/?p=13（p=13），时长 8:15
- 讲义：2.5.2 修改数据 / 2.5.3 删除数据 p37–38（公开镜像；按主题对应，切点 notexact）

- 本集练习数据：practice/p13.sql（先执行，再对照小例）

### 一句话理解

数据写错了要改，不要了要删。这一集讲 UPDATE 和 DELETE，核心只有一句：一定带 WHERE。

### 步骤

1. UPDATE 语法：`UPDATE 表名 SET 字段1=值1, 字段2=值2 [WHERE 条件];`。SET 后面可以一次改多列，用逗号分隔。
2. WHERE 决定改哪些行。不带 WHERE 就是全表每一行都改，这是最典型的事故。
3. DELETE 语法：`DELETE FROM 表名 [WHERE 条件];`。删的是行，表结构还在；不带 WHERE 就是清空整表。
4. 改之前先用同样的 WHERE 写一条 SELECT，看看会命中几行，确认无误再执行 UPDATE 或 DELETE。

### SQL 示例

```
UPDATE employee SET salary = 10500 WHERE id = 2;
SELECT id, name, salary FROM employee WHERE id = 2;
```

说明：第一句只改 id=2 这一行，把薪水设为 10500；第二句回读，应看到 2、小周、10500.00（DECIMAL(10,2) 补两位小数）。用主键做条件最稳，因为主键唯一，最多命中一行。练习时先跑 SELECT 确认命中行数，再改。这张表和数据由本页练习脚本 p13.sql 建好（独立练习库 mysqlnotes_p13）。

### 易错点

- 忘写 WHERE，一条 UPDATE 把全表薪水改成同一个值。执行前先用同样条件 SELECT。
- 以为 DELETE 能删表结构。删结构是 DROP TABLE，DELETE 只删行。
- 用不唯一字段做条件（比如 name），可能一次改到多行。
- 想“删掉某个字段的值”不是 DELETE：DELETE 删整行；把字段置空要用 `UPDATE … SET 字段 = NULL`（字段得允许 NULL）。

### 30 秒速记

UPDATE ... SET ... WHERE；DELETE FROM ... WHERE；不带 WHERE 等于全表；先 SELECT 再改。

### 自测

1. 执行 UPDATE 前最该做的一件事是什么？
   - 答：把同样的 WHERE 放到 SELECT 里先跑一遍，确认命中的行数和内容。行数不对就说明条件写错了，这时还来得及改。
2. DELETE FROM employee; 和 DROP TABLE employee; 有什么区别？
   - 答：前者删掉表里所有行，表还在，还能继续插入；后者把表结构和数据一起删掉，表不存在了。误删数据后想恢复，两者难度也完全不同。

### 材料与来源

- [平台视频页] B站原视频 P13《13. 基础-SQL-DML-更新和删除》 https://www.bilibili.com/video/BV1Kr4y1i7ru/?p=13
- [平台视频页] 本集采样画面 p13_t20.jpg（约 98s） https://www.bilibili.com/video/BV1Kr4y1i7ru/?p=13
- [平台视频页] 本集采样画面 p13_t70.jpg（约 346s） https://www.bilibili.com/video/BV1Kr4y1i7ru/?p=13
- [官方文档] MySQL 8.0 Reference Manual: UPDATE https://dev.mysql.com/doc/refman/8.0/en/update.html

证据说明：以同版讲义公开镜像核对：讲义 2.5.2 修改数据 / 2.5.3 删除数据（p37–38）。原声字幕未取得（匿名接口字幕轨为空且需登录），讲师逐句讲解未核；本页示例、表与数字为站内原创，不是课堂原表。
