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为了保证有更多的内存可用于其它操作,因此会将临时数据库中的部分数据写到磁盘文件中,而内存数据库则始终会将数据存放在内存中。

(0)

相关推荐

  • SQLite教程(五):索引和数据分析/清理

    一.创建索引: 在SQLite中,创建索引的SQL语法和其他大多数关系型数据库基本相同,因为这里也仅仅是给出示例用法:   复制代码 代码如下: sqlite> CREATE TABLE testtable (first_col integer,second_col integer);     --创建最简单的索引,该索引基于某个表的一个字段.     sqlite> CREATE INDEX testtable_idx ON testtable(first_col);     --创建联合索

  • SQLite教程(九):在线备份

    一.常用备份: 下面的方法是比较简单且常用的SQLite数据库备份方式,见如下步骤:     1). 使用SQLite API或Shell工具在源数据库文件上加共享锁.     2). 使用Shell工具(cp或copy)拷贝数据库文件到备份目录.     3). 解除数据库文件上的共享锁.     以上3个步骤可以应用于大多数场景,而且速度也比较快,然而却存在一定的刚性缺陷,如:     1). 所有打算在源数据库上执行写操作的连接都不得不被挂起,直到整个拷贝过程结束并释放文件共享锁.    

  • SQLite教程(一):SQLite数据库介绍

    一.简介: SQLite是目前最流行的开源嵌入式数据库,和很多其他嵌入式存储引擎相比(NoSQL),如BerkeleyDB.MemBASE等,SQLite可以很好的支持关系型数据库所具备的一些基本特征,如标准SQL语法.事务.数据表和索引等.事实上,尽管SQLite拥有诸多关系型数据库的基本特征,然而由于应用场景的不同,它们之间并没有更多的可比性.下面我们将列举一下SQLite的主要特征: 1). 管理简单,甚至可以认为无需管理.     2). 操作方便,SQLite生成的数据库文件可以在各个

  • SQLite教程(六):表达式详解

    一.常用表达式: 和大多数关系型数据库一样,SQLite能够很好的支持SQL标准中提供的表达式,其函数也与SQL标准保持一致,如: 复制代码 代码如下: ||     *    /    %     +    -     <<   >>   &    |     <    <=   >    >=     =    ==   !=   <>   IS   IS NOT   IN   LIKE     AND       OR     ~ 

  • SQLite教程(五):数据库和事务

    一.Attach数据库: ATTACH DATABASE语句添加另外一个数据库文件到当前的连接中,如果文件名为":memory:",我们可以将其视为内存数据库,内存数据库无法持久化到磁盘文件上.如果操作Attached数据库中的表,则需要在表名前加数据库名,如dbname.table_name.最后需要说明的是,如果一个事务包含多个Attached数据库操作,那么该事务仍然是原子的.见如下示例:   复制代码 代码如下: sqlite> CREATE TABLE testtabl

  • 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中支持的聚合函数在很多其他的关系型数据库中也同样支持,因此我们这里将只是给出每个聚集函数的简要说明,而不在给出更多的示例了.这里还需要进一步说明的是,对于所有聚合函数而言,distinct关键字可以作为函数参数字段的前置属性,以便在进行计算时忽略到所有重复的字段值,如count(distinct x). 函数 说明 avg(x) 该函数返回在同一组内参数字段的平均值.对于不能转换为数字值的String和BLOB类型的字段值,如'HELLO',SQLite会将其视为0.

  • 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_开头,因

随机推荐