一、sqlite3 简介
SQLite是一种嵌入式关系型数据库管理系统(RDBMS),被广泛用于移动设备和嵌入式系统中。SQLite原址为:https://www.sqlite.org。SQLite采用C语言编写,通常使用sqlite3命令进行交互。
二、基础命令
1、打开数据库
sqlite3 filename
filename是指数据库文件的名称,如无则在当前目录新建一个文件名为filename的数据库文件。如果文件已存在,则打开已存在的数据库。
2、创建表格
CREATE TABLE table_name(
column1 datatype contraint,
column2 datatype contraint,
...
columnN datatype contraint);
其中,table_name是你要创建的表格的名称;columnX是你要创建的表格中的列的名称;datatype是列的数据类型,如INTEGER、TEXT、BLOB、REAL等; contraint用于约束对该列的限制,如NOT NULL(不允许为空)、UNIQUE(唯一约束)、PRIMARY KEY(主键)等。
3、插入数据
INSERT INTO table_name(column1, column2, column3,...columnN)
VALUES(value1, value2, value3,...valueN);
其中,table_name是你要插入数据的表格的名称;columnX是你要插入数据的表格中的列的名称;valueX是你要插入的值。
4、查询数据
SELECT column1, column2,...columnN
FROM table_name
[WHERE CONDITION];
其中,table_name是你要查询数据的表格的名称;columnX是你要查询数据的表格中的列的名称;CONDITION是查询条件,如WHERE columnX=valueX。
5、修改数据
UPDATE table_name
SET column_name = new_value
[WHERE CONDITION];
其中,table_name是你要修改数据的表格的名称;column_name是你要修改的数据列的名称;new_value是你要修改为的数据值;CONDITION是修改条件,如WHERE columnX=valueX。
6、删除数据
DELETE FROM table_name
[WHERE CONDITION];
其中,table_name是你要删除数据的表格的名称;CONDITION是删除条件。
三、高级使用
1、索引的创建和使用
CREATE INDEX index_name ON table_name (column1, column2,...columnN);
其中,index_name为自定义索引名;table_name为需要创建索引的表名;column1, column2,...columnN 为需要创建索引的列名。索引是将表中某些列的值存储在另外一起数据结构中,此数据结构称为索引表。索引表中的数据与表中的数据相同,只是多一个列指向对应行的地址。这样在查询该表数据时,可以先通过索引表找到对应的所有地址,从而降低查询的时间。
2、事务的使用
事务是针对一组操作的操作序列,它们可以全部成功,也可以全部失败。使用事务可以确保操作的原子性,即保证在该操作被提交后,要么全部执行成功,要么全部回滚。SQLite支持隐式事务提交和显式事务提交两种方式。
BEGIN; // 开始事务
UPDATE table_name SET column_name = new_value WHERE CONDITION;
DELETE FROM table_name WHERE CONDITION;
COMMIT; // 提交事务
其中,BEGIN表示开始一笔事务,COMMIT表示提交这笔事务。如果需要回滚当前的事务,则需要使用ROLLBACK命令。
3、模糊查询和正则表达式的使用
SQLite提供模糊查询的LIKE和GLOB操作符,以及使用正则表达式进行查询的REGEXP操作符。
SELECT column1, column2,...columnN
FROM table_name
WHERE columnX LIKE '%value%';
SELECT column1, column2,...columnN
FROM table_name
WHERE columnX GLOB '*value*';
SELECT column1, column2,...columnN
FROM table_name
WHERE columnX REGEXP 'value';
四、优化
1、建立合适的索引。合适的索引可以极大的提高查询效率,但是过多的索引会减低数据插入、更新、删除的速度。
2、减少重复列。SQLite中,每个列在每个表中只会存在一个数据类型。如果需要在多个表中使用同一个列,那么应该将这个列单独剥离出来,然后建立外键关系。
3、使用预处理语句。SQLite中,预处理语句可以把SQL查询语句分解成两部分,提高了执行效率,避免了SQL注入等安全问题。
sqlite3_prepare_v2(database, sql, -1, &stmt, NULL);
4、合理使用内存。SQLite默认缓存大小为2KB,如果需要修改缓存大小,则可以使用PRAGMA命令进行修改。
PRAGMA cache_size = 64000;
5、使用WAL模式。WAL是一种SQLite3提供的日志模式,可以大幅度提升插入和更新操作的性能。
PRAGMA journal_mode = WAL;
五、总结
本文对SQLite3命令的基础使用和优化进行了详细的阐述,从而使读者在使用和优化SQLite,提高数据查询效率和安全性方面可以有所启发。