四种操作:增、删、改、查。 平台上都做成节点,条件是填表单不是写 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 秒实验
- 把你的更新节点打开,看条件框里填了什么。空着的立刻补上。
- 养成一个动作:改数据前先在查询节点里跑一遍同样的条件,看命中几行。
- 给重要的表加一条规矩:任何删除操作前,先导出一份。
常见误区
- 「条件我填了就行。」填了也要看填得对不对。填成
name LIKE '%'等于没填。 - 「平台应该有二次确认。」删除节点没有确认,点一下就执行。条件空着就是清表。
- 「改错了再改回来。」原来的值已经没了,没有回滚。这就是没有事务的代价。
自测三问(点开对答案)
1. 四种操作里哪两种最危险? —— 更新和删除。前两种错了只是结果不对,后两种错了是数据没了。 2. 为什么平台的「条件空着」比 SQL 的「忘写 WHERE」更隐蔽? —— SQL 忘写你能读出来,表单空着屏幕上就是一个空框,看不到那条语句。 3. 改数据之前的铁律是什么? —— 先跑一遍 SELECT 确认命中几行,再把 SELECT 换成 UPDATE。会写数据了,下一节讲改结构。加字段、改字段名、删表——三个操作风险从低到高,中间那个最容易出事。
- ☐ (本篇完,下一篇 7.4 管理扣子数据库)
相关笔记
- 创建扣子数据库:字段怎么定、为什么要主键
- 扣子数据库和传统数据库的区别:平台库没有事务
- 15 数据库基础 · 索引
- 🐦 扣子开发 AI Agent · 索引