如何使用Supabase-js直接递增timesVisited字段值?
直接递增Supabase数据表字段值的实现方法
当然可以直接实现字段递增,无需两次调用接口。Supabase支持通过原子操作直接在数据库层面完成字段递增,既高效又能避免并发场景下的竞态问题。
具体实现代码
你需要结合过滤条件定位目标行,使用Supabase的SQL表达式或内置辅助函数直接更新timesVisited字段:
方法一:使用SQL表达式
const { data, error } = await Admin.from(tableName) .update({ timesVisited: Admin.sql`timesVisited + 1` }) .eq('userID', userID) .eq('eventName', eventName);
方法二:使用inc辅助函数(Supabase JS v2+)
导入inc函数后可简化递增逻辑:
import { inc } from '@supabase/supabase-js/dist/module/lib/postgres'; const { data, error } = await Admin.from(tableName) .update({ timesVisited: inc(1) }) .eq('userID', userID) .eq('eventName', eventName);
关键注意事项
- 必须添加
.eq('userID', userID)和.eq('eventName', eventName)过滤条件,否则会误更新表中所有行的timesVisited字段。 - 这种操作是数据库层面的原子操作,多个请求同时触发时不会出现计数错误,比先查询再更新的方式更可靠。
内容的提问来源于stack exchange,提问作者Shivam Sahil
相关产品推荐
相关产品推荐

