SQLite教程(十):内存数据库和临时数据库
一、内存数据库:
在SQLite中,数据库通常是存储在磁盘文件中的。然而在有些情况下,我们可以让数据库始终驻留在内存中。最常用的一种方式是在调用sqlite3_open()的时候,数据库文件名参数传递":memory:",如:
代码如下:
rc = sqlite3_open(":memory:", &db);
在调用完以上函数后,不会有任何磁盘文件被生成,取而代之的是,一个新的数据库在纯内存中被成功创建了。由于没有持久化,该数据库在当前数据库连接被关闭后就会立刻消失。需要注意的是,尽管多个数据库连接都可以通过上面的方法创建内存数据库,然而它们却是不同的数据库,相互之间没有任何关系。事实上,我们也可以通过Attach命令将内存数据库像其他普通数据库一样,附加到当前的连接中,如:
代码如下:
ATTACH DATABASE ':memory:' AS aux1;
二、临时数据库:
在调用sqlite3_open()函数或执行ATTACH命令时,如果数据库文件参数传的是空字符串,那么一个新的临时文件将被创建作为临时数据库的底层文件,如:
代码如下:
rc = sqlite3_open("", &db);
ATTACH DATABASE '' AS aux2;
和内存数据库非常相似,两个数据库连接创建的临时数据库也是各自独立的,在连接关闭后,临时数据库将自动消失,其底层文件也将被自动删除。
尽管磁盘文件被创建用于存储临时数据库中的数据信息,但是实际上临时数据库也会和内存数据库一样通常驻留在内存中,唯一不同的是,当临时数据库中数据量过大时,SQLite为了保证有更多的内存可用于其它操作,因此会将临时数据库中的部分数据写到磁盘文件中,而内存数据库则始终会将数据存放在内存中。
相关推荐
-
SQLite教程(二):C/C++接口简介
一.概述: 在SQLite提供的C/C++接口中,其中5个APIs属于核心接口.在这篇博客中我们将主要介绍它们的用法,以及它们所涉及到的核心SQLite对象,如database_connection和prepared_statement.相比于其它数据库引擎提供的APIs,如OCI.MySQL API等,SQLite提供的接口还是非常易于理解和掌握的. 二.核心对象和接口: 1. 核心对象: 在SQLite中最主要的两个对象是,database_connection和prepar
-
SQLite教程(八):命令行工具介绍
工欲善其事,必先利其器.学好SQLite的命令行工具,对于我们学习SQLite本身而言是非常非常有帮助的.最基本的一条就是,它让我们学习SQLite的过程更加轻松愉快.言归正传吧,在SQLite的官方下载网站,提供了支持多个平台的命令行工具,使用该工具我们可以完成大多数常用的SQLite操作,就像sqlplus之于Oracle.以下列表给出了该工具的内置命令: 命令名 命令说明 .help 列出所有内置命令. .backup DBNAME FILE 备份指定的数据库到指定的文件,缺省为当前连接的
-
SQLite教程(七):数据类型详解
一.存储种类和数据类型: SQLite将数据值的存储划分为以下几种存储类型: 复制代码 代码如下: NULL: 表示该值为NULL值. INTEGER: 无符号整型值. REAL: 浮点值. TEXT: 文本字符串,存储使用的编码方式为UTF-8.UTF-16BE.UTF-16LE. BLOB: 存储Blob数据,该类型数据和输入数据完全相同. 由于SQLite采用的是动态数据类型,而其他传统的关系型数据库使用的是静态数据类型,即字段可以存储的数据类型
-
SQLite教程(三):数据表和视图简介
一.创建数据表: 该命令的语法规则和使用方式与大多数关系型数据库基本相同,因此我们还是以示例的方式来演示SQLite中创建表的各种规则.但是对于一些SQLite特有的规则,我们会给予额外的说明.注:以下所有示例均是在sqlite自带命令行工具中完成的. 1). 最简单的数据表: 复制代码 代码如下: sqlite> CREATE TABLE testtable (first_col integer); 这里需要说明的是,对于自定义数据表表名,如testtable,不能以sqlite_开头,因
-
SQLite教程(五):数据库和事务
一.Attach数据库: ATTACH DATABASE语句添加另外一个数据库文件到当前的连接中,如果文件名为":memory:",我们可以将其视为内存数据库,内存数据库无法持久化到磁盘文件上.如果操作Attached数据库中的表,则需要在表名前加数据库名,如dbname.table_name.最后需要说明的是,如果一个事务包含多个Attached数据库操作,那么该事务仍然是原子的.见如下示例: 复制代码 代码如下: sqlite> CREATE TABLE testtabl
-
SQLite教程(四):内置函数
一.聚合函数: SQLite中支持的聚合函数在很多其他的关系型数据库中也同样支持,因此我们这里将只是给出每个聚集函数的简要说明,而不在给出更多的示例了.这里还需要进一步说明的是,对于所有聚合函数而言,distinct关键字可以作为函数参数字段的前置属性,以便在进行计算时忽略到所有重复的字段值,如count(distinct x). 函数 说明 avg(x) 该函数返回在同一组内参数字段的平均值.对于不能转换为数字值的String和BLOB类型的字段值,如'HELLO',SQLite会将其视为0.
-
SQLite教程(六):表达式详解
一.常用表达式: 和大多数关系型数据库一样,SQLite能够很好的支持SQL标准中提供的表达式,其函数也与SQL标准保持一致,如: 复制代码 代码如下: || * / % + - << >> & | < <= > >= = == != <> IS IS NOT IN LIKE AND OR ~
-
SQLite教程(一):SQLite数据库介绍
一.简介: SQLite是目前最流行的开源嵌入式数据库,和很多其他嵌入式存储引擎相比(NoSQL),如BerkeleyDB.MemBASE等,SQLite可以很好的支持关系型数据库所具备的一些基本特征,如标准SQL语法.事务.数据表和索引等.事实上,尽管SQLite拥有诸多关系型数据库的基本特征,然而由于应用场景的不同,它们之间并没有更多的可比性.下面我们将列举一下SQLite的主要特征: 1). 管理简单,甚至可以认为无需管理. 2). 操作方便,SQLite生成的数据库文件可以在各个
-
SQLite教程(九):在线备份
一.常用备份: 下面的方法是比较简单且常用的SQLite数据库备份方式,见如下步骤: 1). 使用SQLite API或Shell工具在源数据库文件上加共享锁. 2). 使用Shell工具(cp或copy)拷贝数据库文件到备份目录. 3). 解除数据库文件上的共享锁. 以上3个步骤可以应用于大多数场景,而且速度也比较快,然而却存在一定的刚性缺陷,如: 1). 所有打算在源数据库上执行写操作的连接都不得不被挂起,直到整个拷贝过程结束并释放文件共享锁.
-
SQLite教程(五):索引和数据分析/清理
一.创建索引: 在SQLite中,创建索引的SQL语法和其他大多数关系型数据库基本相同,因为这里也仅仅是给出示例用法: 复制代码 代码如下: sqlite> CREATE TABLE testtable (first_col integer,second_col integer); --创建最简单的索引,该索引基于某个表的一个字段. sqlite> CREATE INDEX testtable_idx ON testtable(first_col); --创建联合索
随机推荐
- Android 使用Vitamio打造自己的万能播放器(3)——本地播放(主界面、播放列表)
- redis哈希和集合_动力节点Java学院整理
- Java程序中使用JavaMail发送带图片和附件的邮件
- Asp.net Core 初探(发布和部署Linux)
- asp.net下用url重写URLReWriter实现任意二级域名的方法第1/2页
- jsp搜索引擎
- asp.net Hashtable 遍历写法
- ThinkPHP的MVC开发机制实例解析
- 17个Python小技巧分享
- 对Python新手编程过程中如何规避一些常见问题的建议
- C#自动判断Excel版本使用不同的连接字符串
- js 数组克隆方法 小结
- WebSocket+node.js创建即时通信的Web聊天服务器
- 基于BootStrap Metronic开发框架经验小结【六】对话框及提示框的处理和优化
- 深入理解java中的拷贝机制
- 彪哥1.1(智能表格)提供下载
- DevExpress获取节点下可视区域子节点集合的实现方法
- 详谈python read readline readlines的区别
- Android判断网络类型的方法(2g,3g还是wifi)
- C# Socket实现简单控制台案例