SQLite简介

      SQLite 是一个开源的嵌入式关系数据库,它在2000年由D. Richard Hipp发布。SQLite可移植性好,很容易使用,很小,高效而且可靠。SQLite嵌入到使用它的应用程序中,它们共用相同的进程空间,而不是单独的一个进程。从外部 看,它并不像一个RDBMS,但在进程内部,它却是完整的,自包含的数据库引擎。

 

SQLite是一个内嵌式的数据库。

      数据库服务器就在你的程序中,其好处是不需要网络配置和管理。数据库的服务器和客户端运行在同一个进程中。这样可以减少网络访问的消耗,简化数据库管理,使你的程序部署起来更容易。所有需要你做的都已经和你的程序一起编译好了。

一个Perl脚本、一个标准C/C++程序和一个使用PHP编写的Apache进程都使用SQLite

它们都需要访问C API。尽管它们每个进程中都有独立的数据库服务器,但它们可以操作相同的数据库文件。SQLite利用操作系统功能来完成数据的同步和加锁。

体系结构

SQLite拥有一个精致的、模块化的体系结构,并引进了一些独特的方法进行关系型数据库的管理。它由被组织在3个子系统中的8个独立的模块组成,

在体系结构栈的顶部编译查询语句,在中部执行它,在底部处理操作系统的存储和接口。

接口(Interface)

接口由SQLite C API组成,也就是说不管是程序、脚本语言还是库文件,最终都是通过它与SQLite交互的;我们经常使用的ODBC/JDBC最后也会转化为相应C API的调用;

 

编译器(Compiler)

编译过程从分词器(Tokenizer)和分析器(Parser)开始。它们协作处理文本形式的结构化查询(Structured Query Language, SQL)语句,分析其语法有效性,转化为底层能更方便处理的层次数据结构——语法树,然后把语法树传给代码生成器(code generator)进行处理。SQLite分词器的代码是手工编写的,分析器代码是由SQLite定制的分析器生成器(称为Lemon)生成

一旦SQL语句被分解为串值并组织到语法树中,分析器就将该树下传给代码生成器进行处理。而代码生成器根据它生成一种SQLite专用的汇编代码,最后由虚拟机(Virtual Machine)执行

虚拟机(Virtual Machine)

架构中最核心的部分是虚拟机,或者叫做虚拟数据库引擎(Virtual DataBase Engine,VDBE)。它和Java虚拟机相似,解释执行字节代码。VDBE的字节代码(称为虚拟机语言)128个操作码(opcodes)构成,主要是进行数据库操作。它的每一条指令或者用来完成特定的数据库操作(比如打开一个表的游标、开始一个事务等),或者为完成这些操作做准备。总之,所有的这些指令都是为了满足SQL命令的要求。VDBE的指令集能满足任何复杂SQL命令的要求。

后端(Back-end)

后端由B-tree、页缓冲(page cachepager)和操作系统接口(即系统调用)构成。B-treepage cache共同对数据进行管理。它们操作的是数据库页,这些页具有相同的大小,就像集装箱。页里面的“货物”是表示信息的大量bit,这些信息包括记录、字段和索引入口等。B-treepager都不知道信息的具体内容,它们只负责“运输”这些页,页不关心这些“集装箱”里面是什么。

SQLite的优势:

内存占用量小

事务操作是原子,一致,孤立,并且持久的(ACID),即使在系统崩溃和电源故障之后。

ACID兼容(原子性,一致性,独立性,可持久性),支持视图,子查询,触发器

单个库文件中包含数据库引擎与接口,且其运行不依赖其它库

可以将数据放进单个文件

C/C++, PHP等应用提供了接口

允许为SQL命令集动态添加自定义函数(简单函数及聚集函数),而无需重编SQLite

改进的B-树。对于表采用B+树,大大提高查询效率

 

SQL功能

数据定义(DDL):用户定义、删除和修改数据模式

数据查询(DQL):用于查询数据

数据操纵(DML):用于增、删、改数据

数据控制(DCL):用于控制数据访问权限

SQL的语法很像自然语言。每个语句都是一个祈使句,以动词开头,表示所要做的动作。

SQL由命令组成,每个命令以分号(;)结束。如下面是2个独立的命令:

SELECT id, name FROM foods;

INSERT INTO foods VALUES (NULL, 'Whataburger');

 

常量:也称为Literals,表示确切的值,有3种:字符串常量、数据常量和二进制常量。

字符串常量如:'Jerry'    'Newman' 'JujyFruit'

数据常量:数字常量有整数、十进制数和科学记数法表示的数,如:-1   3.142  6.0221415E23

二进制值用如x'0000'的表示法,其中每个数据是一个16进制数。二进制值必须由两个两个的16进制数(8 bits)组成,如:x'01' X'0fff'x'0F0EFF'

保留字:由SQL保留用做特殊的用途,如SELECT  UPDATEINSERTCREATEDROPBEGIN等。标识符指明数据库里的具体对象,如表或索引。保留字预定义,不能用做标识符。SQL不区分大小写,下面是相同的语句:

    SELECT * from foo;

    select * from foo;

 

创建表

SQL中,创建和删除数据库对象的语句一般被称为数据定义语言(data definition languageDDL),操作这些对象中数据的语句称为数据操作语言(data manipulation languageDML)。创建表的语句属于DDL,用CREATE TABLE命令,如下定义:

创建数据库:

1.数据库文件格式:test.db

sqlite> sqlite3 test.db  

sqlite> create table test (id integer primary key, value text);

 

名为id的主键列:该列默认具备自动增长的属性;

名为value的简单文本域;


存储数据的类型:

空:这个值为空值

整数:值被标识为整数,依据值的大小可以依次被存储1,2,3,4,5,6,7,8.

实数:所有值都是浮动的数值,被存储为8字节的IEEE浮动标记序号.

文本:值为文本字符串,使用数据库编码存储(TUTF-8, UTF-16BE or UTF-16-LE).

BLOB: 值是BLOB数据,如何输入就如何存储,不改变格式.

 

SELECT:是SQL命令中最大最复杂的命令。SELECT的很多操作都来源于关系代数。

SQL查询语句的基本结构

简单查询

多表连接查询

合并多个结果集

SELECT INTO

使用TOP限制结果集

子查询

 

插入操作:

sqlite> insert  into test idvaluevalues1,zhang’);

sqlite> insert  into test idvaluevalues2,wang’);

sqlite> insert  into test  (value)  values(liang);

sqlite> insert  into test  (value)  values(liang);

查看数据:

sqlite> select * from test;

 

退出:

sqlite> .exit

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值