SQLite的事务处理方式
SQLite把每一条SQL语句解释为一个事务,这就是事务处理自动提交模式;也可以通过begin...commit语句实现对多条SQL语句的包裹,也就是多条SQL语句在一个事务中进行处理,这就是用户提交模式。
写事务擦写flash事务处理流程:
1.申请共享锁(shared lock)
在写数据库之前,必须先读取数据库的格式以及所要修改的数据页。
每个sqlite数据库都有一个只读表sqlite_master,他定义数据库的模式
1 create table sqlite_master( 2 type TEXT, 3 name TEXT, 4 tbl_name TEXT, 5 rootpage INTEGER, 6 sql TEXT 7 );
type字段:‘table’,‘index’,‘view’,‘trigger’;'table'可以是普通表和虚拟表(virtual)
name字段:表、索引、视图、触发器名称
tbl_name字段:对于表和视图,tbl_name=name;对于索引,tbl_name是该索引所属的表的名称;对于触发器,tbl_name存储引起触发器动作的表或视图名称
rootpage字段:对于表和索引,存储root b-tree的页数;对于视图、触发器和虚拟表,rootpage=0 || NULL
sql字段:‘CREATE TABLE’,‘CREATE VIEW’,‘CREATE INDEX’,‘CREATE VIRTUAL TABLE’,‘CREATE TRIGGER’
2.从数据库读取信息
数据页首先从flash读到系统缓存,然后从系统缓存传递到用户空间,用户空间与系统缓存都位于RAM中。
3.申请一个预留锁(reserved lock)
在修改数据库文件之前,写事务必须获得其预留锁,意味着写事务将来会写数据库,现阶段只读取数据库,reserved lock和shared lock可以同时存在,但是只能有一个reserved lock和多个shared lock。
4.生成回滚日志文件
申请预留锁成功之后,会在系统缓存中生成回滚日志文件,并要把要修改页的原始数据写入回滚日志。
5.修改用户空间的数据页
6.刷回滚日志文件到flash
回滚日志刷新是二次刷新,首先将回滚日志内容(原始数据)刷新至flash;然后将页总数写入回滚日志文件头,将文件头刷新至flash
7.获得一个独享锁(exclusive lock)
任何需要写数据库文件的事务必须获得独享锁,任意时刻只有一个事务可以获得独享锁
8.将修改数据写入到数据库文件中
将用户空间的数据写入操作系统缓存
9.刷新修改页到flash
10.删除回滚日志文件
11.释放exclusive lock
转载于:https://www.cnblogs.com/binger1990/archive/2012/10/08/2715676.html
SQLite的事务处理方式相关推荐
- Linq to Sql : 三种事务处理方式
Linq to SQL支持三种事务处理模型:显式本地事务.显式可分发事务.隐式事务.(from MSDN: 事务 (LINQ to SQL)).MSDN中描述得相对比较粗狂,下面就结合实例来对此进行 ...
- 在C#中实现SQLite的事务处理
一.SQLite事务介绍 事务是针对一个或多个数据库中数据操作的基本单位,操作时可以把许多个SQLite语句组合为一组,把所有这些放在一起作为事务的一部分进行执行. 所有 SQL 命令组成一个单元. ...
- SQLite的事务处理
原文转载:SQLite事务(Transcation)/BUNOOB.COM 概述:SQLite事务(Transaction) 事务是一个对数据库执行工作单元,是以逻辑顺序完成的工作单位或序列,可以由用 ...
- SQLite 基本命令使用方式
本文介绍创建一个简单的数据库,并能够在需要的时间和地点快速使用它们.SQLite 在世界范围内的许多设备中使用. 什么是SQLite? SQLite是一个进程内的库,实现了自给自足的.无服务器的.零配 ...
- Spring有几种事务处理方式?举例说明
1.用原始的transactionfactorybean的,代理dao事务处理 2.用aop:config声明要进行事务增强的切面,用tx:advice声明具体方法的事务属性,及应用到的事务管理器 3 ...
- SQLite入门与分析(四)---Page Cache之事务处理(1)
写在前面:从本章开始,将对SQLite的每个模块进行讨论.讨论的顺序按照我阅读SQLite的顺序来进行,由于项目的需要,以及时间关系,不能给出一个完整的计划,但是我会先讨论我认为比较重要的内容.本节讨 ...
- Sqlite大批量导入数据提高效率的几种方式
前言 SQLite数据库由于其简单.灵活.轻量.开源,已经被越来越多的被应用到中小型应用中.甚至有人说,SQLite完全可以用来取代c语言中的文件读写操作.因此我最近编写有关遥感数据处理的程序的时候, ...
- spring 配置sqlite的方式
sqlite作为一种嵌入式数据库越来越受欢迎,特别是在小型的项目中,下面介绍两种spring配置sqlite数据库的方式 第一种:配置在tomcat目录下 1.在tomcat根目录下创建dbs文件夹, ...
- Qt操作SQLite数据库的三种方式
Qt访问Sqlite数据库的三种方式(即使用三种类库去访问),分别为QSqlQuery.QSqlQueryModel.QSqlTableModel,对于这三种类库,可看为一个比一个上层,也就是封装的更 ...
最新文章
- [POJ1741]Tree
- 深入剖析Android系统
- Merge into的使用详解-你Merge了没有
- GIS讲堂第二课-地图切片简介以及OL中的调用
- linux开启内部路由转发功能
- eclipse创建Maven的动态web工程
- mvc2中如何在下拉列表中显示含有子类的项(子类前加--)
- 深度学习自学(七):腾讯移动端开源框架ncnn学习总结
- 技术人生:恶补基础知识
- MySQL 读写分离配置实践
- 免费试用一年微软云服务【图文并茂】
- 凡刻(Fenke)FK169机械手表测评
- 什么是MBR/DPT/DBR/BPB?
- shader 获取法线_Unity Shader教程 三、法线方向
- 学计算机轻松的表情包,轻松的表情包
- layui 给table里面的添加图标_layui教程---table
- SuperMap Desktop制作地图
- 网格顶点法向量从世界坐标到切空间坐标转换:法向贴图高低模烘焙
- 安卓Bmob后端云的使用(增删改查、上传图片、推送服务等)
- PLSQL连接Oracle:ORA-12154: TNS: 无法解析指定的连接标识符