(7) Can multiple applications or multiple instances of the same application access a single database file at the same time? 这里面提到,sqlite允许多个应用同时操作一个数据库文件,但由于它通过fcntl函数来控制读写锁,因此不能像其它的C/S模式数据库那样(如mysql),即可以同时读也可以同时写,sqlite只允许同一时刻读,如果同一时刻写将返回SQLITE_BUSY.同时还提到了由于fcntl函数在NFS文件系统中并不能始终执行正常,因此请避免在NFS文件系统中使用sqlite. (8) Is SQLite threadsafe? 这里面提到,sqlite允许多线程打开同一个数据库,并分享数据信息,但它的线程安全性需要用户来保证,一方面在linux系统中需要添加编译参数THREADSAFE ,另一方面sqlite数据库打开的指针不能在不同的线程之间传递.
(9) How do I list all tables/indices contained in an SQLite database sqlite中可以使用.table命令查看数据库中所有表,.schema命令查看数据库中表的详细结构.对于每个数据库都会有一个系统表SQLITE_MASTER,结构如下:
CREATE TABLE sqlite_master (
type TEXT, //table或者index,表明这是表还是索引.
name TEXT, //表或索引的名称.
tbl_name TEXT, //索引的情况下,这个字段表明该索引对应的表名称.
rootpage INTEGER,
sql TEXT //存储表或索引创建时的sql语句.
);
而其它临时表将存储在同样结构的SQLITE_TEMP_MASTER表中.
(11) What is the maximum size of a VARCHAR in SQLite
sqlite的varchar类型对于长度是无限制的.
(14) I deleted a lot of data but the database file did not get any smaller. Is this a bug?