讲解
查询之外的三大写操作:INSERT 插入新行、UPDATE 修改已有行、DELETE 删除行。INSERT INTO 表名 (列名列表) VALUES (值列表) 插入一行,列名和值按位置一一对应;一条语句可以插多行,VALUES 后面跟多组括号。主键如果声明为 INTEGER PRIMARY KEY(SQLite 里的自增约定),插入时不给值就自动分配。
UPDATE 表名 SET 列 = 新值 WHERE 条件 修改匹配的行:UPDATE students SET city = '杭州' WHERE name = '周杰'。SET 里可以基于旧值计算:SET price = price * 0.9 全员九折。DELETE FROM 表名 WHERE 条件 删除匹配的行。这两个语句的 WHERE 都是「可选但几乎必须」——省略 WHERE 就是全表更新、全表删除,生产事故的经典剧本。
写操作的安全习惯:UPDATE 或 DELETE 之前,先用同样的 WHERE 条件跑一遍 SELECT,确认命中的行数和数据正是你要动的;重要操作放在事务里(BEGIN; ... COMMIT;),确认无误再提交,发现问题 ROLLBACK 回滚。下面示例在同一个数据库会话里演示「插入 → 修改 → 查询 → 删除 → 再查询」的完整闭环,你可以直观看到每一步的影响。
示例
插入一名新学生(id 自动分配),随后查出他:
INSERT INTO students (name, age, city, class_name, enroll_date) VALUES ('周杰', 21, '深圳', '三班', '2024-09-05');
SELECT * FROM students WHERE name = '周杰';
修改他的城市,再用 SELECT 验证:
UPDATE students SET city = '杭州' WHERE name = '周杰';
SELECT name, city FROM students WHERE name = '周杰';
删除这条演示数据,学生总数回到 8:
DELETE FROM students WHERE name = '周杰';
SELECT COUNT(*) AS student_count FROM students;
常见坑
- UPDATE/DELETE 忘写 WHERE:没有 WHERE 就是全表操作,一个手滑整表数据被覆盖或清空。养成「先写 WHERE 再写 SET/DELETE」的顺序,或先 SELECT 同条件验证。
- INSERT 列与值位置错位:列名列表和值列表按位置对应,多列时数错一个就张冠李戴。显式写出列名列表(而不是省略),错位概率会小很多。
- 以为事务自动开启:很多客户端默认每句自动提交,写错立即生效。重要批量操作显式 BEGIN 开头、COMMIT 结尾,给自己留 ROLLBACK 的后悔药。
- 在主键冲突时盲目重试:主键或唯一列冲突会让 INSERT 报错,程序里要先判断是冲突还是别的错误,而不是无脑重试放大问题。
小结
INSERT 增、UPDATE 改、DELETE 删,后两者离开 WHERE 就是全表事故;先 SELECT 验证条件、用事务兜底。下一节学习建表与索引。