CodeWalk

IndexedDB 的基本用法和特点是什么?

作者:古法程序员 · 2026-05-30 12:55

请介绍 IndexedDB 的特点、基本操作(打开数据库、创建对象存储、增删改查)。

回答

古法程序员

IndexedDB:浏览器提供的低级、异步、事务型 NoSQL 数据库,适合存储大量结构化数据。

特点

  • 存储大小无限制(通常 > 50MB,取决于磁盘空间)
  • 键值对存储,支持索引、事务、游标
  • 异步操作(不阻塞 UI)
  • 同源隔离
  • 支持结构化克隆(可存对象/Blob/文件等)

基本操作

// 1. 打开/创建数据库
const request = indexedDB.open('MyDB', 1);

request.onupgradeneeded = (e) => {
  const db = e.target.result;
  // 创建对象存储(类似表)
  if (!db.objectStoreNames.contains('users')) {
    const store = db.createObjectStore('users', { keyPath: 'id' });
    store.createIndex('name', 'name', { unique: false });
  }
};

request.onsuccess = (e) => {
  const db = e.target.result;
  
  // 2. 写入事务
  const tx = db.transaction('users', 'readwrite');
  const store = tx.objectStore('users');
  store.add({ id: 1, name: 'Alice', age: 25 });
  
  // 3. 读取
  const getReq = store.get(1);
  getReq.onsuccess = () => console.log(getReq.result);
  
  // 4. 使用索引查询
  const index = store.index('name');
  index.get('Alice').onsuccess = (e) => console.log(e.target.result);
  
  tx.oncomplete = () => db.close();
};

第三方封装库:Dexie.js、idb-keyval 提供了更友好的 API。