数据库系列6——增删改操作:数据库是如何被“安全写入”的

本文是【数据库工程系列】的最后一篇。

在前面的所有内容中,我们都在“读”和“算”数据。
数据库系列1:给 AI 工程师的 SQL 入门
简单查询:把数据“拿出来”(SELECT 基础能力一次讲透)
条件查询:把数据“筛对、排对”(WHERE/逻辑/范围/null/LIKE 一次讲透)
高级查询:排序 分页 聚合 分组 过滤一次讲透

子查询:把查询拆成“中间结果”的工程思维
而这一篇,关注的是另一件更危险的事:

你如何修改系统已经保存的事实。


0. 开篇:为什么增删改比查询危险得多

在数据库操作中,有一条非常重要、但常被忽略的分界线:

  • 查询(SELECT)
    只读,不改变数据,错了可以重来。
  • 写操作(INSERT / UPDATE / DELETE)
    一旦执行,数据立刻发生变化。

在工程视角下,写操作本质上是在做一件事:

修改系统已经保存的“事实”。

所以,增删改不是“会不会写”的问题,而是有没有风险意识的问题。


1. 数据插入(INSERT):数据是如何进入系统的

1.1 标准写法(工程中强烈推荐)

INSERT INTO student (id, username, password, age)
VALUES (1, 'jack', '123456', 18);

工程解释:

  • 明确列名 = 明确写入意图
  • 不依赖字段顺序,表结构变动风险更低

这是唯一推荐的写法


1.2 省略列名的写法(为什么不推荐)

INSERT INTO student
VALUES (2, 'lucy', '666', 25);

常见错误:

  • 强依赖表字段顺序
  • 一旦新增字段,旧 SQL 可能直接写错数据

工程提示:

写操作不是“图省事”的地方。


1.3 插入多条记录(批量写入)

INSERT INTO student (id, username, password, age)
VALUES
(3, 'jerry', '888', 25),
(4, 'tom', '123', 22);

工程解释:

  • 一条 SQL 写多行,比多次 INSERT 更安全
  • 事务边界更清晰,性能也更好

1.4 NULL 的正确插入方式(必须理解)

INSERT INTO student (id, username, password, age)
VALUES (5, 'tom', NULL, 22);

常见错误:

-- ❌ 错误:这是字符串
VALUES (5, 'tom', 'null', 22);

工程提示:

NULL 表示“没有值”,不是字符串,也不是 0。


2. 数据修改(UPDATE):最容易误伤的操作

2.1 UPDATE 的标准结构

UPDATE student
SET username = 'lucy'
WHERE age = 18;

UPDATE 本身并不复杂,危险点在于:你改了多少行


2.2 没有 WHERE 的 UPDATE,是事故级操作

-- ❌ 极度危险:整表修改
UPDATE student SET age = 0;

工程铁律(必须记住):

任何 UPDATE,没有 WHERE,默认作用于全表。


2.3 多字段更新示例

UPDATE student
SET username = 'jack', password = '8888'
WHERE age = 28;

工程提示:

  • WHERE 条件尽量唯一
  • 影响行数必须是“你预期的数量”

2.4 安全修改的工程习惯

在真实项目中,推荐遵循:

  1. 先 SELECT,再 UPDATE
  2. 确认命中的行数
  3. 再执行 UPDATE
-- 先确认范围
SELECT * FROM student WHERE age = 18;

-- 再执行修改
UPDATE student SET username = 'lucy' WHERE age = 18;

3. 数据删除(DELETE):不可逆操作

3.1 DELETE 的标准写法

DELETE FROM student
WHERE id = 6;

DELETE 和 UPDATE 一样,危险点不在语法,而在作用范围


3.2 再强调一次:没有 WHERE 的 DELETE

-- ❌ 删除整张表的数据
DELETE FROM student;

工程提示:

DELETE 是不可逆操作。


3.3 工程中的“删除”原则

在真实系统中:

  • 能不删就不删
  • 常用做法是:
    • 增加 is_deleted 字段
    • 用 UPDATE 标记删除(软删除)

DELETE 更适合用于:

  • 测试数据
  • 临时表
  • 明确可重建的数据

4. 增删改小结与安全模板

增删改安全模板(工程级)

-- 插入
INSERT INTO 表名 (1,2, ...)
VALUES (1,2, ...);

-- 修改(必须有 WHERE)
UPDATE 表名
SET1 =1,2 =2
WHERE 条件;

-- 删除(必须有 WHERE)
DELETE FROM 表名
WHERE 条件;

一句话总结

增删改不是语法问题,而是你是否对数据保持敬畏的问题。

写得慢一点,想得清楚一点,
永远比“写得快”更重要。

如果你完整走完了这个系列,你已经具备了:

  • 安全查询数据的能力
  • 正确筛选与统计的能力
  • 组合复杂查询的能力
  • 对写操作保持敬畏的工程习惯

这已经是:

绝大多数 AI Agent / 后端系统,对数据库能力的真实要求。

接下来,你可以选择继续深入:

  • 事务与一致性
  • 索引与性能
  • 或直接把 SQL 融入你的 Agent / 自动化系统

但无论走哪一步,
这套数据库认知,都会是你的底座。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐