摘要:
英文地址文章参考简介支持事务的数据库系统如sqlite的一个重要特性是原子提交(atomic commit)。也就是在一个事务中进行的对数据库的写操作要么全部执行,要么全部不执行。看起来像是对数据库不同部分的写操作时瞬时发生的。实际上,对磁盘内容的改变需要一段时间,写操作不可能是瞬时发生的。为此,sqlite内部有一套逻辑保证保证事务操作的原子性,即使系统crash或掉电也不会破坏原子性。这篇文章... 阅读全文
摘要:
reserved state进入reserved state以后,sqlite可以修改数据库中的内容,不过把修改以后的内容写到pager的缓存里,大小由page cache指定。进入这个状态以后,pager开始初始化日志文件,用户回滚和异常恢复。(其实就是把日志中的文件内容拷贝到数据库文件中去)这种机制使得数据库在进行写操作时可以同时进行读操作。不过由于只有一个reserved或exclusiv... 阅读全文
摘要:
每一个数据库连接可以包括多个数据库文件,一个主数据库文件和attached的几个数据库文件。每一个数据库文件都有自己的B-tree和pager。数据库连接(connection)和事务(transaction)的关系1. 每一个数据库连接都必须在事务下进行操作2. 每一个数据库连接不同同时打开多个事务。同一个数据库文件可以被多个进程同时访问。 阅读全文
摘要:
API分为两大类 core API. 基本的SQL操作extension API. 创建自定义的SQL操作。基本数据结构需要了解的组成部分有连接、statments、B树、pager。为了写好SQLite代码,需要了解的基本概念,API、事务和锁。 连接和statments这两种数据结构和查询语句的基础。一个连接表示对数据库的一个连接,也是一个事务上下文。statments由这些连接产生。s... 阅读全文
摘要:
改变数据insert record插入一行insert into foods (name, type_id) values ('Cinnamon Bobka', 1);如果在insert语句中为每一列都提供了值,可以省去列名,顺序是表创建时的顺序。 insert into foods values(NULL, 1, 'Blueberry Bobka');插入 a set of rows子查询(su... 阅读全文
摘要:
语法verb + subject + predicatecommannds(命令)SQL由命令组成,以分号为结束。命令有token组成,token由white space分隔,包括空格、tab、换行。literals有三种字符串。由单引号'包围。如果字符中要有',用两个连续的'。比如'kenny''s chicken'数值。整型、小数、科学计数法二进制。x'0000'。二进制值长度必须是8bit的... 阅读全文
摘要:
Command-Line Programshell mode输入sqlite3即可。如果不指定数据库名字,sqlite会使用in-memory数据库。可以使用CLP作为交互式的shell。所有输入会被作为query,以.开头的命令会作为CLP操作。 .help.exit.showcommand-line mode数据库管理创建数据库sqlite3 test.db不会实际创建数据库文件,直到我们创... 阅读全文
摘要:
Architecture就像编译器一样,结构分为前端、虚拟机、后端性能和限制(limitations)使用B树来做indexes,用B+树来做table。和其他数据库一样由于不需要鉴权、网络访问,所以对于select,insert,update操作比其他数据库要快一些。如果数据库过大、查询语句太过复杂的话,SQLite性能不如其他数据库。Oracle或PostgreSQL计算出很多可行的quer... 阅读全文
摘要:
地址:http://www.sqlite.org/download.html组织形式可以看到source code是Amalgamation。真正的源码在这里什么是Amalgamation下载源码以后,打开时候这样子的src文件夹里就是所有的代码,大概有一百多个。那么为啥还要有一个Amalgamation呢?SQLite标准的makefile产出的就是一个amalgamation,其实就是一... 阅读全文