Supabase 数据增删改
上一篇学会了读,这一篇学写。插入、更新、删除三大操作,代码模式都非常统一,重点在于理解操作背后的安全问题。
插入数据
用 .insert() 插入一条数据,参数是一个对象
const { data, error } = await supabase
.from('profiles')
.insert({
id: '33333333-3333-3333-3333-333333333333',
username: '小刚',
age: 22
})
一次插入多条,传入数组
const { data, error } = await supabase
.from('profiles')
.insert([
{ id: '44444444-4444-4444-4444-444444444444', username: '小丽' },
{ id: '55555555-5555-5555-5555-555555555555', username: '小强' }
])
默认情况下 insert 不返回插入的数据,结尾加 .select() 让它返回
const { data } = await supabase
.from('profiles')
.insert({ username: '小刚', age: 22 })
.select()
注意缺省的列,比如 created_at 和 is_vip,会由数据库按默认值自动填充,这正是上一篇建表时定义默认值的作用。
更新数据
更新必须搭配条件,否则会把整张表都改掉。写法是先写新值,再用 .eq() 定位行
const { data, error } = await supabase
.from('profiles')
.update({ age: 23 })
.eq('id', '33333333-3333-3333-3333-333333333333')
.id(‘’) 这种写法不存在,所有条件都必须通过 .eq() 这类方法指定。只更新传入的字段,其他字段保持原值。
删除数据
删除同样必须带条件
const { data, error } = await supabase
.from('profiles')
.delete()
.eq('id', '33333333-3333-3333-3333-333333333333')
删除是不可逆操作,上线项目里建议在表上加 is_deleted 字段做软删除,需要时再查出来,这里先了解概念。
增删改查一表通
四种操作放在一起看,模式非常统一,前缀是操作类型,后缀是筛选条件
| 操作 | 方法 | 关键点 |
|---|---|---|
| 读 | .select() | 不加条件就是全表 |
| 增 | .insert() | 可加 .select() 返回新数据 |
| 改 | .update() | 必须加 .eq() 条件 |
| 删 | .delete() | 必须加 .eq() 条件 |
谁说能改
到目前为止,所有操作都是直接拿 anon key 调用的,而 anon key 是公开的,任何访问你网站的人都能拿到。这意味着任何人打开浏览器控制台,都能执行一段代码往你的表里插数据,或者把别人的资料改掉。
这不是危言耸听,只要不设防,你的数据库就是全裸的。注册登录(第六、七篇)解决的是”你是谁”,行级安全策略(第八篇)解决的是”你能动哪些行”,两者缺一不可。
下一篇学习用户认证,先解决”你是谁”的问题。
下一篇 Supabase 用户认证入门