sqlite编程心得
1. 应用场景SQLite(sqlite3)数据库是个文件,又有数据库操作的接口,所以某些场景用起来特别方便。就我的使用感受, sqlite3特别适合应用于单进程来操作数据,缓存中间数据,并且数据库大小有上限,建议1G之内。在内部,SQLite由以下几个组件组成:内核、SQL编译器、后端以及附件。SQLite通过利用虚拟机和虚拟数据库引擎(VDBE),使调试、修改和扩展SQLi
·
1. 应用场景
就我的使用感受, 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。
对于自增id插入NULL。
insert into tb_report (id, time, user_id , total_volume ) Values(NULL, '2015-11-18 09:17:18', 10001, 389836235);
DELETE
delete操作不会使数据库文件减少,而是标记一下,被新插入的数据使用,想减少数据库大小,需要做数据库整理。
http://www.sqlite.org/limits.html
sqlite3有默认限制SQLITE_MAX_SQL_LENGTH=1000000, SQLITE_MAX_COMPOUND_SELECT=500.
所以当在一个insert里面插入多个value时候,不要超过这个限制,不然会报错。
若你想修改这些限制,需要自己编译安装。
VACUUM 命令通过复制主数据库中的内容到一个临时数据库文件,然后清空主数据库,并从副本中重新载入原始的数据库文件。这消除了空闲页,把表中的数据排列为连续的,另外会清理数据库文件结构。
下面是在命令提示符中对整个数据库发出 VACUUM 命令的语法:
若数据库文件遭到损坏,client使用会提示:sqlite3 disk image malformat
修复方式是将原来的数据库导出为sql语句,创建新的数据库导入sql。
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
更多推荐
已为社区贡献1条内容
所有评论(0)