indexedDB的基础使用—事务

。事务是indexedDB数据库中非常重要的一个概念,因为任何对于数据库中数据的读和修改的操作只能在事务中进行。

事务的创建

事务由IDBDatabase对象调用其transaction方法创建。

let IDBTransaction = IDBDatabase.transaction(storeNames, mode);

可以看出该方法接受两个参数:

  1. storeNames:就是在新的事务的作用域中的objectStore,生命成一组字符串数组的形式。意义在于指明用户希望访问的objectStore。如果仅想访问一个objectStore,那么仅需传入一个字符串而没必要传一个数组。

例如: let transaction = db.transaction('test1')等价于let transaction = db.transaction(['test1'])

注:如果希望访问数据库中的所有objectStore的话,可以直接传入IDBDatabase对象的objectStoreNames方法


  1. mode(可选):即事务运行的模式,模式共有3种,readonlyreadwritereadwriteflush(Firefox特有),默认值为readonly。为了避免性能下降
    ,如果不是要对数据库写入数据就不要用readwrite模式打开事务

IDBTransaction对象

在调用完IDBDatabase对象的transaction方法之后,返回的值是一个IDBTransaction对象。

属性

  1. db:当前事务所属的数据库
  2. error:当存在一个不成功的事务时,这个属性会返回一个DOMException来指示错误对象。当事务尚未完成、完成了且成功提交或者是手动调用abort方法时,这个属性的值都为null
  3. mode:事务的模式
  4. objectStoreNames:返回创建事务时传入的objectStore名。

事件

  1. onabort:这个事件当事务被终止时触发。
  2. oncomplete:当事务被成功完成时触发
  3. onerror:当事务没有被成功完成时触发

方法

  1. abort:放弃本次连接的事务的所有修改,若当前的事物处于回滚或完成状态时,则会抛出一个错误事件。
  2. objectStore:返回该事务作用域内的objectStore对象。若传入的参数不在作用域内则会报错。

多个事务的执行顺序

事务在被创建的时候就已经开始,而不是在发起第一个请求的时候,例如:

let trans1 = db.transaction("test1", "readwrite");
let trans2 = db.transaction("test1", "readwrite");
let objectStore2 = trans2.objectStore("test1")
let objectStore1 = trans1.objectStore("test1")
objectStore2.put({name: 'tom'}});
objectStore1.put({name: 'pat'});

在这里插入图片描述

可以看到"pat"在"tom"的前面。

猜你喜欢

转载自blog.csdn.net/hjc256/article/details/88938515