如何在IndexedDB中删除索引?onupgradeneeded报错解决
解决IndexedDB在onupgradeneeded中删除索引的问题
JS代码实现方案
在onupgradeneeded回调里,不能手动创建新事务——此时浏览器已经自动开启了版本变更事务,手动创建会触发冲突错误。直接利用回调参数自带的事务操作即可:
// 打开数据库时指定新版本号(需大于当前版本) const request = indexedDB.open('yourDBName', newVersion); request.onupgradeneeded = function(event) { const db = event.target.result; // 获取当前正在运行的版本变更事务 const transaction = event.target.transaction; // 获取目标对象仓库 const myStore = transaction.objectStore('myStoreName'); // 先判断索引存在再删除,避免报错 if (myStore.indexNames.contains('myIndex')) { myStore.deleteIndex('myIndex'); } };
- 核心逻辑:
onupgradeneeded的触发时机本身就绑定了版本变更事务,直接复用这个事务即可,无需手动创建。 - 增加
indexNames.contains判断是为了避免索引不存在时抛出额外错误,提升代码健壮性。
Chrome开发者工具备选方案
如果不想编写代码,可直接通过Chrome DevTools删除索引:
- 按
F12打开开发者工具,切换到Application标签页。 - 在左侧导航栏展开IndexedDB,找到目标数据库,点击对应的对象仓库
myStoreName。 - 切换到Indexes标签,找到要删除的
myIndex,点击右侧的Delete按钮完成操作。
内容的提问来源于stack exchange,提问作者Cincy Steve
相关产品推荐
相关产品推荐

