SQLite 知识摘要 --- 事务
在许多时候,我们在使用大数据的时候会发现,尽管sqlite数据库的执行效率已经很快了,但是还是满足不了我们的需求,这时候我们会很容易考虑到使用并发的方式去访问sqlite数据库,但是sqlite数据独有的机制有会让我们在使用中遇到各种问题,如死锁,报错等等。下午就详细介绍一下sqlite的事务,了解sqlite事务对我们并发操作sqlite数据库具有极大的帮助。
本篇预备知识
我们先来了解下SQLite执行事务的基本流程,状态变化过程,再分析怎么使用才更优。SQLite定义的锁的状态有如下几种:
- UNLOCK:最初始状态,没有任何锁在数据库上;
- SHARED:共享状态,允许读取数据,但是不能写入和修改,同一时间允许有多个SHARED存在, 共享锁只是针对操作系统的磁盘缓存;
- RESERVED:这个锁意味着进程将要对数据库进行写操作。某一时刻只能有一个RESERVED锁,但是RESERVED锁和SHARED锁可以共存,而且可以对数据库加新的SHARED锁。引入这个状态是为了提高并发性,在这个状态下可以先修改缓存数据,直到将修改写入磁盘的时候再加上排他锁;
- EXCLUSIVE:真正将数据写入磁盘的过程,此时不允许其他任何写入读取操作,是排他锁;
- PENDING:可以理解为一个中间状态,从限制小的状态往限制高的状态变化的一个过程。例如从RESERVED向EXCLUSIVE转变的时候需要经过这个状态,需要等待已有的读写连接完成之后再进入EXCLUSIVE。
事务在执行过程中锁状态之间变化,如下图所示:
SQLite一次事务过程
整个详细的流程看
本篇主要从SQLite事务执行的原理中寻找如何更高效地使用它. 本篇预备知识 我们先来了解下SQLite执行事务的基本流程,状态变化过程,再分析怎么使用才更优.SQLite定义的锁的状态有如下几种: ... 1.android下junit测试框架配置 单元测试需要在手机中进行安装测试 (1).在清单文件中manifest节点下配置如下节点 <instrumentation android:name= ... 关于SQLite事务可以解决一些问题,比如你要插入两个数据,可以将两个数据作为同一个事务进行插入,这样如果第二个数据错误了,便自动执行回滚操作,第一个数据也不会插入成功,保证了数据的同步! 一.实际的 ... Spring虽然提供了灵活方便的事务管理功能,但这些功能都是基于底层数据库本身的事务处理机制工作的.要深入了解Spring的事务管理和配置,有必要先对数据库事务的基础知识进行学习. 何为数据库事务 “ ... SQLite是Android系统内置的一款轻量级的关系型数据库,它的运算速度非常快,占用资源很少,通常只需要几百K的内存就足够了.SQLite不仅支持标准的SQL语法,还遵循了数据库的ACID事务. ... 目录 SQLite事务 事务的属性 事务控制 BEGIN TRANSACTION命令 COMMIT命令 ROLLBACK命令 SQLite事务 事务(Transaction) 是一个对数据库执行工作单 ... 使用SQLiteDatabase的beginTransaction()方法可以开启一个事务,程序执行到endTransaction() 方法时会检查事务的标志是否为成功,如果为成功则提交事务,否则回滚 ... 1.Session处理 赋值:session('name','value'); //设置session 与 $_SESSION['think']['name'] = 'value';相等 取值:$va ... 知识点具体解释:http://blog.csdn.net/zhaoyazhi2129/article/details/9025995 详细代码: MainActivity.java package c ... 位运算符(二进制位运算) 运算符 运算 例子 << 左移 3 << 2 = 12 --> 3 * 2 * 2 =12 >> 右移 3 >> 1 = ... 1.EL概述: EL表达式可以嵌入再JSP页面内部,减少JSP脚本的编写 EL出现的目的是要替代JSP页面中脚本的编写 EL最重要的作用就是从域中取出数据: 引入: JSP中<%=request ... Python下载 Python最新源码,二进制文档,新闻资讯等可以在Python的官网查看到: Python官网:https://www.python.org/ 你可以在以下链接中下载 Python ... OS模块 import os ''' os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录: ... 题目大意:给你一个代表区间$[1,n]$的线段树,问你随机访问区间$[1,n]$中的一个子区间,覆盖到的线段树节点个数的期望(需要乘上$\frac{n(n-1)}{2}$后输出). 数据范围:$n≤1 ... 使用selenium框架还可以进行分布式测试,操作如下: 准备俩台PC:A和B,ip分别为IP_A和IP_B 下载最新的selenium-standalone的jar包,可以到下面地址下载各版本的包: ... 利用log4net写入异常类日志,在网上搜索一阵之后便想记录下来,以便后期使用,同时希望帮到大家. 第一步:使用管理NuGet程序包导入log4net.dll 导入成功后会在引用下显示相应的log4 ... 1. Stack和Heap 每个线程对应一个stack,线程创建的时候CLR为其创建这个stack,stack主要作用是记录函数的执行情况.值类型变量(函数的参数.局部变量 等非成员变量)都分配 ... List<String> list = new ArrayList<String>(); list.add("aaa"); list.add("b ... 作者关于此主题早期文章 Spring框架快速入门 起源 要谈Spring的历史,就要先谈J2EE.J2EE应用程序的广泛实现是在1999年和2000年开始的,它的出现带来了诸如事务管理之类的核心中间层 ...SQLite 知识摘要 --- 事务的更多相关文章
随机推荐