You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用React+Redux+Dexie重复存储数据报ConstraintError问题求助

解决Dexie存储时的ConstraintError: Key already exists问题

嘿,我来帮你搞定这个报错~

你遇到的这个错误,核心原因是Dexie的add()方法只允许插入全新的、主键不重复的记录。

看你的数据库schema,table表的主键是++id(自增主键),第一次存储正常是因为当时传入的data里没有带id字段,Dexie自动帮你生成了唯一的自增ID。但第二次存储时,大概率是你传入的data对象里带上了之前已经存在的id值,触发了主键唯一性约束,所以抛出了这个错误。

给你两个针对性的解决方案:

方案1:如果是要添加全新记录

确保你传入的data里没有id字段,让Dexie自动生成新的自增ID。可以在存储前手动移除id:

return dispatch => {
  // 复制data并删除id字段(避免修改原数据)
  const newData = { ...data };
  delete newData.id;
  
  db.table
    .add(newData)
    .then(function(id){
      console.log(id)
    })
    .catch(function(error){
      console.log("Error: " + error);
    });
}

方案2:如果是要更新已有记录(或兼容新增/更新)

如果你第二次操作是想更新之前的记录,或者希望方法自动判断是新增还是更新,直接把add()换成put()就好。put()方法的逻辑是:主键存在则更新,不存在则插入,完美适配这种场景:

return dispatch => {
  db.table
    .put(data) // 替换add为put
    .then(function(id){
      console.log(id)
    })
    .catch(function(error){
      console.log("Error: " + error);
    });
}

再确认下你的schema:++id已经正确定义了自增主键,只要按照上面的方式调整,就能解决这个重复键的问题啦~

内容的提问来源于stack exchange,提问作者MD Ashik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:14:44