关闭

sqlite编程心得

标签: sqlitevacuum
185660人阅读 评论(0) 收藏 举报
分类:

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.html
sqlite3有默认限制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



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1978238次
    • 积分:1135
    • 等级:
    • 排名:千里之外
    • 原创:20篇
    • 转载:1篇
    • 译文:1篇
    • 评论:0条
    文章分类