数据增删改查:CRUD 四类基础操作 增删改查(Create / Read / Update / Delete,简称 CRUD)是与数据打交道最基础的四类操作,对应 SQL 的 INSERT、SELECT、UPDATE、DELETE。本节用通俗的语言讲清楚它们的写法与要点。 插入数据(INSERT) INSERT 用于向表中添加新行。其基本结构是「指明要插入的列,再给出对应的值」。 几个常用技巧: 省略有默认值的列:如果某列有默认值(如 自动生成、 默认当前时间),插入时可以不写它,数据库会自动填充。 批量插入:一条 INSERT 可以一次插入多行,用逗号分隔多组 VALUES,比循环单条插入高效得多。 返回插入结果:可用 让插入语句返回刚插入的完整行,方便拿到自动生成的主键。
增删改查(Create / Read / Update / Delete,简称 CRUD)是与数据打交道最基础的四类操作,对应 SQL 的 INSERT、SELECT、UPDATE、DELETE。本节用通俗的语言讲清楚它们的写法与要点。
INSERT 用于向表中添加新行。其基本结构是「指明要插入的列,再给出对应的值」。
INSERT INTO users (id, email, name) VALUES ('一个UUID', 'someone@example.com', '张三');
几个常用技巧:
id 自动生成、created_at 默认当前时间),插入时可以不写它,数据库会自动填充。RETURNING * 让插入语句返回刚插入的完整行,方便拿到自动生成的主键。INSERT INTO users (email, name) VALUES ('a@example.com', '甲'), ('b@example.com', '乙') RETURNING id, email;
SELECT 是 SQL 中使用频率最高的语句,用于从表中读取数据。
SELECT id, email, name FROM users;
要点:
* 表示所有列;但在生产中建议显式列出所需列,既清晰又能减少传输量。LIMIT 限制返回行数,避免一次性拉取全表。DISTINCT 去除重复行。复杂的过滤、排序、分页将在下一节展开,本节先建立基本骨架。
UPDATE 用于修改已存在的行,结构是「更新哪张表、设置哪些列、满足什么条件」。
UPDATE users SET name = '李四', updated_at = now() WHERE id = '某个UUID';
最重要的安全原则:永远不要忘了 WHERE 子句。如果不加条件,UPDATE 会更新全表的所有行——这是一个极常见且危险的操作失误。同样,UPDATE 也支持 RETURNING 返回更新后的行。
经验法则:写 UPDATE / DELETE 时,先写 WHERE 条件,再写要更新的内容,养成习惯可避免误伤全表。
DELETE 用于删除行,同样依赖 WHERE 子句限定范围。
DELETE FROM orders WHERE status = 'cancelled' AND created_at < '某日期';
与 UPDATE 一样,没有 WHERE 的 DELETE 会清空整张表,务必谨慎。在生产环境中,对重要数据的删除常采用「软删除」——增加一个 deleted_at 时间戳字段标记删除,而非真正物理删除,以便恢复与审计。
在 Supabase 项目里,执行 CRUD 有多种途径,它们最终都转化为 SQL:
无论哪种途径,理解 SQL 本身的语义,都是正确使用它们的前提。
INSERT 写入、SELECT 读取、UPDATE 修改、DELETE 删除,构成数据操作的基石。掌握这四类语句,再配合约束与事务,你就能安全地维护数据库中的数据。下一节将进一步丰富 SELECT,学习过滤、排序与分页,让它能服务于真实的列表与搜索需求。