🐸 青蛙编程网
首页 / 数据库 / SQLite / 4. 增删改:INSERT / UPDATE / DELETE

4. 增删改:INSERT / UPDATE / DELETE

这是什么:增删改 = 往表里插数据(INSERT)、改数据(UPDATE)、删数据(DELETE),合称数据的「写操作」。

为什么用:表建好了只是有了空仓库,真实数据总在不停地进进出出。这三条语句和 MySQL 写法基本一致,差异点本章点名。

如何用:沿用上一章的 user / article 表,插数据、改数据、删数据各来一遍。

4.1 INSERT:写入数据

INSERT INTO user (username, email) VALUES
    ('frog', 'frog@example.com'),
    ('panda', 'panda@example.com');

INSERT INTO article (title, views, user_id) VALUES
    ('从零学前端:HTML 入门', 120, 1),
    ('CSS 才是网页的灵魂', 85, 1),
    ('MySQL 练手记', 40, 2);

SELECT * FROM user;

预期输出:

1|frog|frog@example.com
2|panda|panda@example.com

没写 id,自增主键自动补上了。注意 MySQL 教程里的 DEFAULT CURRENT_TIMESTAMP 在 SQLite 里同样可用(时间默认值),但列类型仍按 TEXT 亲和处理。

4.2 UPDATE:修改数据

UPDATE article SET views = views + 10 WHERE id = 1;
SELECT title, views FROM article WHERE id = 1;

预期输出:

从零学前端:HTML 入门|130

安全习惯(两边数据库通用):写 UPDATE / DELETE 前,先用同样的 WHERE 跑一遍 SELECT,确认会命中的行正是你想改的行。

4.3 DELETE:删除数据

DELETE FROM article WHERE id = 3;
SELECT COUNT(*) FROM article;

预期输出:

2

DELETE FROM article;(不带 WHERE)会清空全表——没有确认弹窗,没有撤销。

4.4 SQLite 特色:UPSERT

「存在就更新,不存在就插入」用 ON CONFLICT 一句搞定(MySQL 用 ON DUPLICATE KEY UPDATE):

INSERT INTO user (id, username, email) VALUES (1, 'frog', 'new@example.com')
    ON CONFLICT(id) DO UPDATE SET email = excluded.email;

SELECT username, email FROM user WHERE id = 1;

预期输出(email 被更新了):

frog|new@example.com

excluded 指代「这次想插但冲突了的那行数据」。

对比项 MySQL SQLite
存在则更新 ON DUPLICATE KEY UPDATE ON CONFLICT(...) DO UPDATE
布尔值 TRUE / FALSE 1 / 0
忽略冲突 INSERT IGNORE INSERT OR IGNORE

4.5 动手改

  1. 给 panda 的所有文章阅读量 +5(一条 UPDATE 完成)
  2. 删除 views 小于 50 的文章,先写 SELECT 验证再删
  3. 把第 4.4 节的 UPSERT 改成「冲突时什么都不做」(提示:DO NOTHING)

4.6 小结

  • INSERT / UPDATE / DELETE 与 MySQL 写法基本一致
  • 改前先 SELECT 确认 WHERE 命中范围,是保命习惯
  • UPSERT 用 ON CONFLICT ... DO UPDATE,布尔用 0 / 1

下一章:查询基础:SELECT 与 WHERE 🐸

📥 下载本章代码

ZIP 内含本章全部代码文件与说明,解压即用,与教程内容同步生成。