Upsert 数据
                                                    
                                                 
                                            
                                            
                                            
                                                
    
    
        upsert()用于对表(table)或视图(view)执行 UPSERT 操作。
在关系型数据库中,Upsert是一种结合了"插入(Insert)“和"更新(Update)“的操作,它允许我们在表或视图上执行插入或更新操作。
通常情况下,当我们想要向数据库中插入一行数据时,我们会使用INSERT语句。
但是,如果该行数据已经存在(通常通过主键来判断),我们可能希望更新该行数据而不是插入重复的数据。
Upsert通过传递列到onConflict方法,我们可以使用.upsert()来实现以下功能:
如果不存在具有相应onConflict列的行,则执行等效于.insert()的插入操作。 
如果存在具有相应onConflict列的行,则根据ignoreDuplicates的设置执行另一种操作。 
 
需要注意的是,为了使用upsert,必须在values中包含主键。主键是用于唯一标识表中每一行的一列或一组列,确保数据的唯一性和完整性。
案例1 (Upsert数据) link  
	
 
	
  
  
  
  
	
  
  
  
  
  
  
  
  
  
  
                                                                                
await supabase
  .from('messages')
  .upsert({ 'id': 3, 'message': 'foo', 'username': 'supabot' });
   
   
 
 
案例2 (将数据Upsert到带有约束的表中) link  
	
 
	
  
  
  
  
	
  
  
  
  
  
  
  
  
  
  
                                                                                
await supabase
  .from('users')
  .upsert({ 'username': 'supabot' }, { 'onConflict': 'username' });
   
   
 
	运行以下代码将使 Supabase 进行数据的 UPSERT 操作到 “users” 表中。如果用户名 ‘supabot’ 已经存在,onConflict 参数会告诉 Supabase 根据传递给 onConflict 的列来覆盖那一行的数据。
 
 
案例3 (返回确切的行数) link  
	
 
	
  
  
  
  
	
  
  
  
  
  
  
  
  
  
  
                                                                                
final res = await supabase.from('users').upsert(
  {'id': 3, 'message': 'foo', 'username': 'supabot'},
  options: const FetchOptions(count: CountOption.exact),
);
final data = res.data;
final count = res.count;
   
   
 
	count 选项的允许取值为:exact、planned 和 estimated。