relational-indexdb

1.0.8 • Public • Published

relational-indexdb 使用说明

IndexedDB:
  • IndexedDB 是一种客户端存储技术 非关系型数据库,用于在 Web 浏览器中存储和检索大量结构化数据。

  • 它提供了一个类似关系型数据库的API,但是数据存储在浏览器中而不是远程服务器上。

  • IndexedDB 使用对象存储空间来存储和检索数据,类似于关系型数据库的表。

  • 它支持复杂的查询和索引,以及事务操作。

  • IndexedDB 在 Web 应用程序中广泛用于离线数据存储、缓存数据和本地数据持久化等场景。

  • 虽然index DB是非关系型数据库 但是a yong为大家封装好了各种方法(updateDataByCursor、queryDataByCursor、deleteDataByCursor) 可以到达关系型数据库 那样的操作效果所以财位组件名字命名为relational-indexdb

当谈到数据库时,有两种主要类型:关系型数据库和非关系型数据库。下面是对它们以及 IndexedDB 的简要介绍:

  1. 关系型数据库:

    • 关系型数据库使用表格结构来组织和存储数据。
    • 数据以行和列的形式存储在表中,其中每行表示一个记录,每列表示一个属性或字段。
    • 数据之间通过关系(主键和外键)建立关联。
    • 常见的关系型数据库有 MySQL、Oracle、SQL Server 和 PostgreSQL。
  2. 非关系型数据库(NoSQL):

    • 非关系型数据库采用不同的数据模型,如键值对、文档、列族和图形等。
    • 它们通常更灵活,适用于处理大量非结构化和半结构化数据。
    • 没有固定的表格结构,允许动态添加或删除字段。
    • 常见的非关系型数据库有 MongoDB、Cassandra、Redis 和 Elasticsearch。
RelationalIndexDB构造函数
参数 类型 描述
databaseName string 数据库名称
version number 数据库版本号
tableName string 表名
keyPath string 主键
autoIncrement boolean 是否自增
indexConfigs IndexConfigs[] 索引配置
const tableName = 'myTable';
const version = 1;
const keyPath = 'id';
const tableSchema = [
    {name: 'id', keyPath: 'id', unique: true},
    {name: 'issue', keyPath: 'issue', unique: false},
    {name: 'answer', keyPath: 'answer', unique: false},
];
//在new RelationalIndexDB 示例时候将会创建一个数据表
const indexDB = new RelationalIndexDB('ayong', 1, tableName, keyPath, true, tableSchema);

方法methds ⚠️ 所有方法返回值都是proms

createTable(tableName, version, keyPath, autoIncrement, indexConfigs)

新增/创建表。

参数 类型 描述
tableName string 表名
version number 版本号
keyPath string 主键
autoIncrement boolean 是否自增
indexConfigs IndexConfigs[] 索引配置
IndexConfigs 表配置字段结介绍
字段 类型 描述
name string 索引名称,用于标识该索引在对象存储空间中的唯一性
keyPath string 索引字段的路径,指定要索引的属性或键路径
unique boolean 指示索引的值是否唯一,默认为false
const indexConfigs = [
  { name: 'nameIndex', keyPath: 'name', unique: false },
  { name: 'ageIndex', keyPath: 'age', unique: true },
];

createTable使用代码示例

const indexDB = new RelationalIndexDB('myDatabase', 2);
indexDB.createTable('myTable', 1, 'id', true, [
  { name: 'id', keyPath: 'id', unique: true }, 
  {name: 'title', keyPath: 'title', unique: false},  
  {name: 'useName', keyPath: 'useName', unique: false},
   {name: 'level', keyPath: 'level', unique: false}
]);

addRecord(key)

添加数据

参数 类型 描述
tableName string 表名
data Object 存储数据:数据结构要与表结构相对应,主键不能重复
indexDB.addRecord('myTable', { id: '123', useName: 'John Doe', title: '阿勇学前端', level: 100 });

queryRecord(tableName,key)

根据主键查询数据

参数 类型 描述
tableName string 表名
key string 主键值
indexDB.deleteRecord('myTable', '123');

deleteRecord(tableName, key)

删除记录。

参数 类型 描述
tableName string 表名
key any 主键值
//删除主键 为123 的那条数据
indexDB.updateRecord('myTable', '123');

updateRecord(tableName, key, newData)

更新数据。

参数 类型 描述
tableName string 表名
key any 主键值
newData any 新数据对象:要修改的具体字段会与老数据覆盖相同的ke y
/**
*这示例将会更新myTable表中 主键为 123。这条数据中 表字段 name 修改为 John Smith,更改哪个字段就写入哪个字段的新值就可以了
 类似于mysql中的s q l语句  但是要注意 index DB不能执行s q l 他是非关系型数据库
 UPDATE myTable SET name = 'John Smith' WHERE id = 123;

*/
indexDB.updateRecord('myTable', '123', { name: 'John Smith' });

batchUpdateRecords(tableName, updatesToUpdate)

参数 类型 描述
tableName string 表名
updatesToUpdate updatesToUpdate[] 要批量修改的列表数组字段详情见下方

updatesToUpdate[] 批量修改的列表数组字段详情

参数 类型 描述
keyPathValue string 要修改的主键值
data Object 要修改的字段
/**
* 批量更新跟updateRecord 一样 不同的是更新多条
*
**/
indexDB.batchUpdateRecords("myTable", [{
    keyPathValue: 1688291753347,
    data: {
        id: 1688291753347,
        name: 'ayong---6666'
    }
},
    {
        keyPathValue: 1688291767078,
        data: {
            id: 1688291767078,
            title: '阿勇学前端'
        }
    }
])

batchDeleteRecords(tableName, keysToDelete)

批量删除数据。

参数 类型 描述
tableName string 表名
keysToDelete any[] 需要删除的主键值数组
const keys = ['123', '456'];
indexDB.batchDeleteRecords('myTable', keys);

deleteTable(tableName)

删除表。

参数 类型 描述
tableName string 表名
indexDB.deleteTable('myTable');

queryRecordsInRange(tableName, indexName, start, end)

范围查询记录。

类型 描述
tableName string 表名
indexName string 索引名
start any 范围起始值
end any 范围结束值
 //查询主键为id 值在1——20 之间的数据
indexDB.queryRecordsInRange('myTable', 'id', 1, 10).then((record) => {
      console.log('Record-----:', record);
  })

deleteRecordsInRange(tableName, indexName, start, end)

参数 类型 描述
tableName string 表名
indexName string 索引名
start any 范围起始值
end any 范围结束值
 //删除主键为id 值在1——20 之间的数据
indexDB.deleteRecordsInRange('myTable', 'id', 1, 10).then((record) => {
      console.log('Record-----:', record);
  })

范围修改记录。

参数 类型 描述
tableName string 表名
indexName string 索引名
start any 范围起始值
end any 范围结束值
newData any 要更新的新数据

deleteDataByCursor(tableName: string, condition: object): Promise

参数 类型 描述
tableName string 表名
condition object 删除的条件对象
/**
这个方法就是筛选符合条件数据 将这条数据删除
* 删除title = 无意义内卷   id:'123 的这条数据 就是符合多条件筛选条件 并操作这条数据
与之前的范围修改数据deleteRecordsInRange  batchDeleteRecords 不同的是他们都是以主键为筛选条件操作数据
这个方法可以提供给你可以任意以表结构中筛选任意字段 符合条件后操作数据 
它类似于mysql中 s q l 语句 DELETE FROM myTable WHERE title = '无意义内卷' AND id = '123';

*
**/
indexDB.deleteDataByCursor('myTable', { title: '无意义内卷',id:'123' })
  .then(() => {
    console.log('数据删除成功');
  })
  .catch((error) => {
    console.log('删除数据时发生错误:', error);
  });

updateDataByCursor

该方法用于通过游标更新符合条件的数据。

参数 类型 描述
tableName string 表名
condition object 更新的条件对象
updateData object 更新的数据对象
/**
*如果更改的数据字段中有主键 例如这个表中的主键是id。那你的id 不能跟被的数据重复
它类似于s q l中的
UPDATE myTable SET title = '我要加油', id = '1231231' WHERE title = '无意义内卷' AND id = '123';

**/
indexDB.updateDataByCursor('myTable', { title: '无意义内卷',id:'123' }, { title: '我要加油',id:'1231231' })
  .then(() => {
    console.log('数据更新成功');
  })
  .catch((error) => {
    console.log('更新数据时发生错误:', error);
  });

queryDataByCursor

该方法用于通过游标查询符合条件的数据。

参数 类型 描述
tableName string 表名
condition object 查询的条件对象
/**
根据表中多个字段查询数据 ;查询title = '无意义内卷'并且id = '123' 的数据 
它类似于s q l中的
SELECT * FROM myTable WHERE title = '无意义内卷' AND id = '123';
**/
indexDB.queryDataByCursor('myTable', { age: 30 })
  .then((results) => {
    console.log('查询到的数据:', results);
  })
  .catch((error) => {
    console.log('查询数据时发生错误:', error);
  });

clearTable(tableName)

参数 类型 描述
tableName string 表名
indexDB.clearTable('myTable');

deleteDatabase()

删除数据库。

indexDB.deleteDatabase();

Package Sidebar

Install

npm i relational-indexdb

Weekly Downloads

3

Version

1.0.8

License

ISC

Unpacked Size

25.5 kB

Total Files

3

Last publish

Collaborators

  • ayongnice