🐦 第7章 扣子数据库实战
📄 一句话概括

四种操作:增、删、改、查。 平台上都做成节点,条件是填表单不是写 SQL。 四个坑里最狠的一个:条件空着就是全表。 演示里五行数据一秒被覆盖。 改数据只有一条铁律:先 SELECT 确认命中几行,再把 SELECT 换成 UPDATE。

📝 本章和前面几章的关系

上一节建表,这一节往里写。 这一节的 Demo 是本课「后果最直观」的一个:真跑一遍忘写 WHERE,看整张表被改成一样。 第 7.1 节说过平台没有事务——所以这种覆盖改不回来。这一节演的就是那一刻。

一、四个操作各自在干什么

操作 节点里的表单 最容易错的地方
插入 每个字段填一个值或引用上游变量 必填字段漏填
查询 若干条件 + 取几条 + 排序 条件写宽了查出无关记录
更新 条件 + 要改的字段新值 条件空着就是全表
删除 条件 条件空着就是清表

四种里前两种出错只是「结果不对」,后两种出错是「数据没了」。所以后两种要格外小心。 注意平台的表单和 SQL 有个差别:表单里条件空着,你看不到那条语句长什么样。SQL 里忘写 WHERE, 你好歹能读出来;表单空着,屏幕上就是一个空框。

二、插入:必填与空值

插入是最安全的操作——错了删掉重来就行。但有两个细节。 必填字段漏填会报错,这是好事。所以建表时至少设一个必填,防止插进一堆空行。 可选字段空着进去,是 NULL 不是空字符串。 这两个东西在查询时不一样:= '' 查不到 NULL, 得用 IS NULL。

这一条在第 7.6 节那个登记助手里会咬人:抽不出来的字段如果写成空字符串, 统计时会被当成「有值但是空」,很容易漏。

三、查询:条件写宽了也是错

查询出错的形态不是「查不到」,是「查到太多」。 演示里四种条件:按日期、按事由模糊、按姓名、数个数。四种都正常。 但真实的坑在「取几条」。平台默认可能是 20 条、50 条,超过的部分它不告你。

所以查完要看一眼条数对不对。要拿全量,得加分页或者把上限调大。

四、更新:那个空白的条件框

演示里执行了一句 UPDATE guest SET purpose = '已回访',没写 WHERE。 五行全改了。 原本只想改一行,结果整张表的「事由」都变成了「已回访」。 更麻烦的是改不回来——原来的值被覆盖了,没有历史副本。第 7.1 节说过没有事务,这里就是那一刻。

演示里我是手工一行一行补回去的,五行写了五条语句。真实场景里你可能根本不知道原来是什么。

五、删除:那七个字符

演示里写 DELETE FROM guest WHERE gid = 5,五行变四行。 不写 WHERE,就是五行变零行。删一行和清空表,只差七个字符。 平台上更隐蔽:删除节点里条件框留空,点一下就清表,没有二次确认。

所以加两条习惯:删除节点旁边放一个「先查一遍」的节点,把要删的行数打出来;重要的表删之前先导出。

六、三条纪律

一、改和删之前先 SELECT。 把 SELECT 跑一遍,看命中几行, 确认了再把 SELECT 换成 UPDATE/DELETE。 二、能用主键就用主键。 别用姓名、别用日期,那些会重复。 三、批量操作前先备份。 平台没有回滚,备份是唯一的后悔药。

三条纪律都不难,难的是每次都做。事故从来不是因为不知道,是因为那次赶时间。

七、动手 Demo:增删改查:忘写 WHERE 会怎样

一张五行访客表。四种操作各跑一遍,重点是第三段:故意忘写 WHERE,看会发生什么。

UPDATE guest SET purpose = '已回访'          -- 忘了 WHERE

-- 五行全变成「已回访」。原来的值没了。
-- 只能一行一行手工补:
UPDATE guest SET purpose = '谈供货'   WHERE gid = 1
UPDATE guest SET purpose = '送样品'   WHERE gid = 2
UPDATE guest SET purpose = '调试设备' WHERE gid = 3
UPDATE guest SET purpose = '面试'     WHERE gid = 4

实跑输出:

--------------------------------------------------------------------
增删改查:忘写 WHERE 会怎样
--------------------------------------------------------------------


  ① 插入:新的一行
  --------------------------------------------------------------------
  插入后:5 行

| gid | 姓名 | 事由 | 日期 |
|---:|---|---|---|
| 1 | 张伟 | 谈供货 | 2026-10-30 |
| 2 | 王芳 | 送样品 | 2026-10-30 |
| 3 | 陈明 | 调试设备 | 2026-10-31 |
| 4 | 李娜 | 面试 | 2026-10-31 |
| 5 | 赵磊 | 维修 | 2026-11-01 |


  ② 查询:四种常见条件
  --------------------------------------------------------------------
  按日期 → 张伟、王芳
  按事由模糊 → 张伟
  按姓名 → 陈明
  数个数 → 5

  ③ 更新:忘写 WHERE
  --------------------------------------------------------------------
  执行 UPDATE guest SET purpose='已回访' 之后:5 行

| gid | 姓名 | 事由 | 日期 |
|---:|---|---|---|
| 1 | 张伟 | 已回访 | 2026-10-30 |
| 2 | 王芳 | 已回访 | 2026-10-30 |
| 3 | 陈明 | 已回访 | 2026-10-31 |
| 4 | 李娜 | 已回访 | 2026-10-31 |
| 5 | 赵磊 | 已回访 | 2026-11-01 |

  五行全改了。 原本只想改一行,忘了 WHERE,整张表被覆盖。

  ④ 想改回来:已经改不回来了
  --------------------------------------------------------------------
  原来的 purpose 值被覆盖了,没有历史副本。这就是没有事务、没有备份的代价。
  所以更新只有一条铁律:先 SELECT 一遍确认条件,再把 SELECT 换成 UPDATE。
  手工补回来(五行各写一次):5 行

| gid | 姓名 | 事由 | 日期 |
|---:|---|---|---|
| 1 | 张伟 | 谈供货 | 2026-10-30 |
| 2 | 王芳 | 送样品 | 2026-10-30 |
| 3 | 陈明 | 调试设备 | 2026-10-31 |
| 4 | 李娜 | 面试 | 2026-10-31 |
| 5 | 赵磊 | 已回访 | 2026-11-01 |


  ⑤ 删除:同样忘写 WHERE
  --------------------------------------------------------------------
  写 WHERE gid = 5:5 行 → 4 行。
  不写 WHERE 的话就是 4 行 → 0 行。删整张表和删一行,差的就是那七个字符。

  ⑥ 改数据的三条纪律
  --------------------------------------------------------------------
  一、更新和删除前先跑一遍 SELECT,确认条件命中几行。
  二、能用主键就用主键,别用姓名这种会重的东西。
  三、批量操作前先备份——第 7.4 节的删表那一段会讲备份有多重要。
  ! 平台上「更新数据」和「删除数据」节点的条件写在表单里,不是写 SQL,但坑一模一样:
  条件空着就是全表。 表单里空着比 SQL 里忘写更隐蔽,因为你看不到那条语句。

①第一段插入一行,五行变六行。插入是最安全的操作,错了删掉重来就行。 ②第二段四种查询都正常。真实的风险不在查不到,在「取几条」的默认上限——超过的部分平台不告你。 ③第三段是这个 Demo 的重点。执行前后各打一张表,一眼能看出五行全变了。 ④第四段是关键:改不回来。原值被覆盖,没有历史副本,五行得手工写五条语句补。 全靠我记得原来是什么——真实场景里你记不住。 ⑤第五段:DELETE ... WHERE gid = 5 是五行变四行,不写 WHERE 是五行变零行。差七个字符,差一张表。

30 秒实验

  1. 把你的更新节点打开,看条件框里填了什么。空着的立刻补上。
  2. 养成一个动作:改数据前先在查询节点里跑一遍同样的条件,看命中几行。
  3. 给重要的表加一条规矩:任何删除操作前,先导出一份。

常见误区

  1. 「条件我填了就行。」填了也要看填得对不对。填成 name LIKE '%' 等于没填。
  2. 「平台应该有二次确认。」删除节点没有确认,点一下就执行。条件空着就是清表。
  3. 「改错了再改回来。」原来的值已经没了,没有回滚。这就是没有事务的代价。
自测三问(点开对答案) 1. 四种操作里哪两种最危险? —— 更新和删除。前两种错了只是结果不对,后两种错了是数据没了。 2. 为什么平台的「条件空着」比 SQL 的「忘写 WHERE」更隐蔽? —— SQL 忘写你能读出来,表单空着屏幕上就是一个空框,看不到那条语句。 3. 改数据之前的铁律是什么? —— 先跑一遍 SELECT 确认命中几行,再把 SELECT 换成 UPDATE。

会写数据了,下一节讲改结构。加字段、改字段名、删表——三个操作风险从低到高,中间那个最容易出事。

相关笔记