IndexedDB 的 version 参数是架构升级的关键开关,必须为大于0的整数;调用 indexedDB.open 且 newVersion > 当前版本时触发 upgradeneeded 事件,仅此时可创建/删除对象仓库或添加索引。

HTML5 本身没有“Version 版本号”用于控制数据库架构更新。真正影响 Web SQL 或 IndexedDB 架构演进的是 数据库自身的版本号机制(如 IndexedDB 的 version 参数、Web SQL 的 version 字段),而非 HTML5 规范的版本。
IndexedDB 的 version 是架构升级的关键开关
IndexedDB 使用整数 version 控制数据库结构变更。当调用 indexedDB.open(dbName, newVersion) 且 newVersion > 当前版本 时,会触发 upgradeneeded 事件——这是唯一能创建/删除对象仓库(object store)、添加索引的地方。
- version 必须是大于 0 的整数,不能是字符串或小数
- 若只读打开(version 不变),则无法修改 schema,连
createObjectStore都会报错 - 降级(newVersion
Web SQL 的 version 仅作标识,不自动触发升级
Web SQL 在 openDatabase() 中传入的 version 字符串,仅用于初始化时比对。如果数据库已存在且 version 不匹配,不会自动执行升级,而是由开发者手动监听 error 或通过 changeVersion() 显式迁移。
- 首次创建时 version 写 "1.0",后续想加字段,必须调用
db.changeVersion("1.0", "2.0", ...) - 该方法已废弃,现代项目应避免依赖 Web SQL
- 无 version 变更时,执行 DDL(如 ALTER TABLE)需自行判断表结构并处理兼容性
HTML5 标准版本和数据库版本无关
HTML5 是一个持续演进的规范,没有“v5.1”“v5.2”这样的递增版本号。所谓“HTML5”,指的是包含语义标签、Canvas、本地存储等特性的集合。浏览器实现这些特性的时间点不同,但 不会因 HTML5 规范更新而自动改变 IndexedDB 或 Web SQL 的行为。
立即学习“前端免费学习笔记(深入)”;
- Chrome 100 支持 IndexedDB 3.0 API,和你写的是 还是 无关
- 数据库版本号完全由你的 JavaScript 代码控制,与页面使用的 HTML 声明无关
- 混淆 HTML5 版本和数据库版本,容易误以为“升级 HTML5 就能升级数据库结构”
不复杂但容易忽略:数据库版本不是配置项,是升级流程的触发器和守门人。写对 version 数字,才能进 upgradeneeded;没进这个回调,就别想动 schema。



















