HTML5本身无主键与自增概念,IndexedDB通过keyPath和autoIncrement:true实现主键与自增,Web SQL虽支持PRIMARY KEY AUTOINCREMENT但已被废弃,推荐优先使用IndexedDB。

HTML5 本身没有“主键(PrimaryKey)”或“自增(AutoIncrement)”的概念——这些是数据库(如 SQLite、MySQL)的特性,不是 HTML 或 DOM 的功能。但如果你是在使用 Web SQL Database(已废弃但部分旧项目仍在用)或更现代的 IndexedDB(HTML5 标准推荐的客户端存储方案),那么“主键”和“自增”确实有对应实现方式。
IndexedDB 中的主键与自增 ID
IndexedDB 是 HTML5 推荐的本地存储 API,支持结构化数据和索引查询。它的“主键”由 keyPath 或 keyGenerator 控制,“自增”则通过 autoIncrement: true 实现。
- 创建 objectStore 时指定
{ keyPath: 'id', autoIncrement: true },ID 就会自动递增,且该字段成为主键; - 若不设 keyPath,但设
autoIncrement: true,则主键为系统生成的数字(从 1 开始),不显式存入对象; - 若设了 keyPath(如
'id')但没设 autoIncrement,则插入时必须手动提供id值,否则报错; - 主键值必须唯一,重复插入相同主键会触发
abort事务(除非用put()覆盖,或add()拒绝重复)。
Web SQL(已废弃)中的 PRIMARY KEY 和 AUTOINCREMENT
Web SQL 基于 SQLite,语法接近传统 SQL,可直接写 PRIMARY KEY AUTOINCREMENT:
CREATE TABLE users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT);- 插入时不提供
id,数据库自动分配递增值; - 注意:
AUTOINCREMENT在 SQLite 中是可选优化,真正保证自增的是INTEGER PRIMARY KEY,加AUTOINCREMENT会额外限制重用已删除的 ID; - 该 API 已被 W3C 废弃,不推荐新项目使用,仅用于兼容老旧环境。
实际开发建议:优先用 IndexedDB + autoIncrement
现代前端应使用 IndexedDB,并合理配置主键策略:
立即学习“前端免费学习笔记(深入)”;
- 需要业务意义 ID(如订单号、UUID)?用字符串 keyPath,关闭 autoIncrement,自己生成;
- 只需简单序号做内部标识?用
keyPath: 'id'+autoIncrement: true最省心; - 不想在数据对象里存 ID?省略 keyPath,只设
autoIncrement: true,主键由 IndexedDB 隐式管理; - 记得用
transaction.objectStore().add(item)插入(拒绝重复),或put(item)(允许覆盖)。
不复杂但容易忽略:主键机制依赖于 objectStore 创建时的选项,后续无法修改,务必在初始化阶段设计清楚。


















