HTML中IndexedDB创建数据库与对象仓库的基本操作教程

夏辰吖_3133

夏辰吖_3133

2026-06-08

370人浏览

原创

indexeddb.open()必须配onupgradeneeded才能建结构,否则objectstorenames.length为0,后续事务报notfounderror;每次改结构须递增版本号,并在onupgradeneeded中用contains检查后创建store,keypath与autoincrement需按数据主键来源正确选择。

html中indexeddb创建数据库与对象仓库的基本操作教程

indexedDB.open() 必须配 onupgradeneeded 才能建结构

不写 onupgradeneeded,createObjectStore() 就根本不会执行——你拿到的 db 实例里 objectStoreNames.length === 0,后续任何 transaction('users', 'readwrite') 都会报 NotFoundError 或 InvalidStateError: The database has not been upgraded yet.。

这个回调不是“可选升级钩子”,而是唯一能改 schema 的入口。首次打开新库、或传入更高版本号时,浏览器强制触发它;旧版本号不会触发,也不会报错,只会静默沿用旧结构。

  • 每次新增 store / index / 修改 keyPath,必须递增版本号(比如从 1 → 2)
  • 在 onupgradeneeded 里先用 db.objectStoreNames.contains('users') 检查,避免重复创建报 ConstraintError
  • 别在 onsuccess 里调 createObjectStore()——事务已关闭,直接抛 InvalidStateError

createObjectStore() 的 keyPath 和 autoIncrement 怎么选

这两个参数决定主键来源和生成方式,互斥且不可混用。选错会导致 add() 报 DataError 或数据语义错乱。

Cartoonize AI
Cartoonize AI

一款AI图像与设计工具,主要用于在线将照片快速转换为卡通、动漫、素描等多种艺术风格的 AI 工具,适合需要提升相关任务效率的用户。

下载
  • 后端返回带明确 ID(如 { id: "usr_abc123", name: "Alice" })→ 用 { keyPath: 'id' },不设 autoIncrement
  • 纯前端生成、无业务 ID(如本地日志、草稿)→ 用 { keyPath: 'id', autoIncrement: true },插入时不用传 id 字段
  • 完全无主键字段(如存 Blob 或纯配置 JSON)→ 不设 keyPath,用 store.add(data, key) 显式传 key(比如时间戳或 UUID 字符串)
  • 设了 keyPath: 'id' 却传 { name: 'Bob' }(缺 id)→ add() 立即报 DataError
  • 设了 autoIncrement: true 还手动传 id → 浏览器忽略你传的值,仍自增

事务必须新建、不能复用,且要监听 oncomplete

IndexedDB 的事务是短命的:一旦当前事件循环结束、且没有待决请求,事务自动 abort。常见表现是批量 add() 只成功第一个,其余全丢。

  • 每次读写操作前,必须调用 db.transaction(['storeName'], 'readwrite') 新建事务,不能缓存复用
  • 写入后务必监听 request.onsuccess 或 transaction.oncomplete,仅靠 add() 返回 request 不代表落盘
  • 不要在 fetch().then() 或 setTimeout 里操作 objectStore——事务早已失效,再调就抛 TransactionInactiveError
  • 批量写入建议用 Promise.all(requests.map(r => new Promise(...))) 收集所有 onsuccess,而非同步 for 循环

索引不是可选优化项,查非主键字段必须先建 index

objectStore.get(key) 能按主键快速取,但想按 email 或 status 查?没索引就只能遍历全表——大数据量下卡死 UI,count() 和 getAll() 也会变慢。

  • 在 onupgradeneeded 里,对要查询的字段调用 store.createIndex('email_idx', 'email', { unique: false })
  • 查索引字段要用 store.index('email_idx').get('a@b.com'),不能直接 store.get('a@b.com')
  • unique: true 适合邮箱、手机号等唯一约束字段;重复值会触发 ConstraintError
  • 索引名(如 'email_idx')只是标识符,不影响查询逻辑,但命名清晰利于维护

最易被忽略的是:版本号不升,onupgradeneeded 就不会触发;而没这个回调,一切结构定义都等于没写。很多“数据库打不开”“查不到数据”的问题,根源都在这里——不是代码漏了某行,而是版本卡在 1 再也没动过。

前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!

相关文章

HTML速学教程(入门课程)
HTML速学教程(入门课程)

HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
html版权符号
html版权符号

html版权符号是“©”,可以在html源文件中直接输入或者从word中复制粘贴过来,php中文网还为大家带来html的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.14

5755

7

html在线编辑器
html在线编辑器

html在线编辑器是用于在线编辑的工具,编辑的内容是基于HTML的文档。它经常被应用于留言板留言、论坛发贴、Blog编写日志或等需要用户输入普通HTML的地方,是Web应用的常用模块之一。php中文网为大家带来了html在线编辑器的相关教程、以及相关文章等内容,供大家免费下载使用。

2023.06.21

3272

4

html网页制作
html网页制作

html网页制作是指使用超文本标记语言来设计和创建网页的过程,html是一种标记语言,它使用标记来描述文档结构和语义,并定义了网页中的各种元素和内容的呈现方式。本专题为大家提供html网页制作的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.31

2930

5

html空格
html空格

html空格是一种用于在网页中添加间隔和对齐文本的特殊字符,被用于在网页中插入额外的空间,以改变元素之间的排列和对齐方式。本专题为大家提供html空格的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.01

2959

5

html是什么
html是什么

HTML是一种标准标记语言,用于创建和呈现网页的结构和内容,是互联网发展的基石,为网页开发提供了丰富的功能和灵活性。本专题为大家提供html相关的各种文章、以及下载和课程。

2023.08.11

4779

6

html字体大小怎么设置
html字体大小怎么设置

在网页设计中,字体大小的选择是至关重要的。合理的字体大小不仅可以提升网页的可读性,还能够影响用户对网页整体布局的感知。php中文网将介绍一些常用的方法和技巧,帮助您在HTML中设置合适的字体大小。

2023.08.11

2901

3

html转txt
html转txt

html转txt的方法有使用文本编辑器、使用在线转换工具和使用Python编程。本专题为大家提供html转txt相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.31

2709

3

html文本框代码怎么写
html文本框代码怎么写

html文本框代码:1、单行文本框【<input type="text" style="height:..;width:..;" />】;2、多行文本框【textarea style=";height:;"></textare】。

2023.09.01

2408

6

HTML嵌入CSS样式的方法
HTML嵌入CSS样式的方法

HTML嵌入CSS样式的方法有内联样式、内部样式表和外部样式表。本专题为大家提供CSS样式相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.20

2448

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.4万人学习