1).open 打开数据库
例子:
sqlite> .open test.db
注意:>后面有点
2) .tables 查看数据库包含的表名
sqlite> .tables
3) .schema 查看数据库中所有的表的结构
sqlite> .schema students
4) 执行sql语句
sqlite> select * from students where StudentID = 3 ;
-显示SELECT结果集的列名。
--以列的形式显示各个字段。
sqlite> .header on
sqlite> .mode column
sqlite> .width 10
5).exit 退出
6) .explain 准备显示sql语句转换成VDBC机器码的语句
例子如下:
sqlite> .explain
sqlite> EXPLAIN select * from students ;
7)在上面的基础上,如果调用了.explain
可以查看简单的如下的细节,目前需要等到翻译了英文版本才能够理解
sqlite> EXPLAIN QUERY PLAN select * from students;
sele order from data
0 0 0 SCAN TABLE students
当然,我在下面的网站上看到了对students表创建索引,之后产生的不同:
摘自:http://blog.itpub.net/16900201/viewspace-1291550/
sqlite> create index student_index on students(StudentID);
sqlite> EXPLAIN QUERY PLAN select * from student where StudnetID = 1;
结果显示如下:
0 0 0 SEARCH TABLE student USING INDEX student_index(StudentID= ?)
综上所述,该语句说明了数据是如何查询的,当然了只有建立索引的时候,才有效,这里我们可以大胆的断言:实际上,如果数据库不建立索引,其实就是扫描整一个数据库的表记录,如果建立了索引就会搜索索引,这个话题将会在以后的文章中,进行详细的分析说明,并且从源码角度如何正确建立索引,而且是在多个列上建立聚簇索引。
如下是一些简单的探索:
1)数据库并没有保存student_index这张表,至于保存在什么地方等待探索!!
Error:no such table student_index;
2)索引是否记录了对应数据块的编号,来加快搜索,保存的结构是什么??
update别名问题:
目前测试过程中,发现sqlite是不支持在update中使用别名,例如:
update task as t set t.state = 4 where t.taskID = 65
说明在执行sql语句的时候需要相当注意
注意事项
sqlite数据库保存的内容编码格式可能是UTF-8或者GBK编码,直接启动sqlite.exe程序读取数据库的内容,目前读取GBK编码的时候,显示中文乱码
解决方案:很多用户希望能够在控制台下输入中文,必须使用指令chcp 936,切换到GBK编码格式,才能够正常输入
2)目前查看UTF-8编码的数据库文件,使用指令chcp 65001,切换到UTF-8编码字符集