sqlite编程心得
2015-11-19 08:35
357 查看
1. 应用场景
SQLite(sqlite3)数据库是个文件,又有数据库操作的接口,所以某些场景用起来特别方便。就我的使用感受, sqlite3特别适合应用于单进程来操作数据,缓存中间数据,并且数据库大小有上限,建议1G之内。
在内部,SQLite由以下几个组件组成:内核、SQL编译器、后端以及附件。SQLite通过利用虚拟机和虚拟数据库引擎(VDBE),使调试、修改和扩展SQLite的内核变得更加方便。所有SQL语句都被编译成易读的、可以在SQLite虚拟机中执行的程序集。SQLite支持大小高达2 TB的数据库,每个数据库完全存储在单个磁盘文件中。这些磁盘文件可以在不同字节顺序的计算机之间移动。这些数据以B+树(B+tree)数据结构的形式存储在磁盘上。SQLite根据该文件系统获得其数据库权限。
相关文档详见http://www.sqlite.org/
2. 操作
例如centos 6.3上创建数据库test.db,里面有一个表tb_report。CREATE TABLE tb_report ( id INTEGER PRIMARY KEY AUTOINCREMENT, time TIMESTAMP NOT NULL DEFAULT '1972-01-01 00:00:00', user_id INTEGER NOT NULL, total_volume INTEGER NOT NULL DEFAULT 0, creationdate TIMESTAMP default CURRENT_TIMESTAMP ); CREATE INDEX idx_report_user_id ON tb_report(user_id);
自增ID
INTEGER是64位,所以是够用的。
自增id定义为“PRIMARY KEY AUTOINCREMENT",虽然定义为"PRIMARY KEY"也可以自增,但是当"delete from tb_report"操作之后,又开始从1自增了。
INSERT
对于自增id插入NULL。
insert into tb_report (id, time, user_id , total_volume ) Values(NULL, '2015-11-18 09:17:18', 10001, 389836235);
DELETE
delete from tb_report;sqlite没有truncate table命令,"delete from tb_report;"不加where, 相当于 truncate table.
delete操作不会使数据库文件减少,而是标记一下,被新插入的数据使用,想减少数据库大小,需要做数据库整理。
3. 限制
http://www.sqlite.org/limits.htmlsqlite3有默认限制SQLITE_MAX_SQL_LENGTH=1000000, SQLITE_MAX_COMPOUND_SELECT=500.
所以当在一个insert里面插入多个value时候,不要超过这个限制,不然会报错。
若你想修改这些限制,需要自己编译安装。
4. 数据库整理
VACUUM 命令通过复制主数据库中的内容到一个临时数据库文件,然后清空主数据库,并从副本中重新载入原始的数据库文件。这消除了空闲页,把表中的数据排列为连续的,另外会清理数据库文件结构。下面是在命令提示符中对整个数据库发出 VACUUM 命令的语法:
$sqlite3 test.db "VACUUM;"您也可以在 SQLite 提示符中运行 VACUUM,如下所示:
sqlite> VACUUM;您也可以在特定的表上运行 VACUUM,如下所示:
sqlite> VACUUM tb_report;
5. 数据库修复
若数据库文件遭到损坏,client使用会提示:sqlite3 disk image malformat修复方式是将原来的数据库导出为sql语句,创建新的数据库导入sql。
$sqlite3 test.db sqlite>.output test.sql sqlite>.dump sqlite>.quit $mv test.db test.db.bak $sqlite3 test.db sqlite>.read test.sql sqlite>.quit
相关文章推荐
- SQLite教程(十一):临时文件
- SQLite中重置自动编号列的方法
- 保护你的Sqlite数据库(SQLite数据库安全秘籍)
- SQLite教程(十):内存数据库和临时数据库
- SQLite 入门教程二 SQLite的创建、修改、删除表
- 详解SQLite中的数据类型
- 详解SQLite中的查询规划器
- C#封装的Sqlite访问类实例
- SQLite中的B-Tree实现细节分析
- SQLite 中文指南之FAQ第1/6页
- SQLite 内存数据库学习手册
- SQLite中的WAL机制详细介绍
- Sqlite数据库里插入数据的条数上限是500
- SQLite速度评测代码
- 简单分析SQLite4的一些设计改变
- C++操作SQLite简明教程
- C#实现Excel导入sqlite的方法
- C#调用SQLite的方法实例分析
- sqlite时间戳转时间语句(时间转时间戳)
- SQLite教程(四):内置函数