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教程(五):索引和数据分析/清理
一.创建索引: 在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_开头,因
随机推荐
- Go程序性能优化及pprof使用方法详解
- 批处理_mysql建立游戏排行榜!
- 对数据进行分页显示到table中的实现方法
- MySQL 5.7.18 release版安装指南(含有bin文件版本)
- javascript实现仿百度图片的瀑布流加载效果
- 在JavaScript中用getMinutes()方法返回指定的分时刻
- android实现上传本地图片到网络功能
- Yii控制器中filter过滤器用法分析
- css 兼容性问题this.style.cursor=''hand''
- js数组实现权重概率分配
- jQuery实现鼠标选中文字后弹出提示窗口效果【附demo源码】
- Linux tcpdump命令详解大全
- Java日志相关技术_动力节点Java学院整理
- 浅析C/C++变量在内存中的分布
- java在pdf中生成表格的方法
- Android下录制App操作生成Gif动态图的全过程
- vue.js-div滚动条隐藏但有滚动效果的实现方法
- 使用node搭建自动发图文微博机器人的方法
- 在vue中获取微信支付code及code被占用问题的解决方法
- Python线上环境使用日志的及配置文件