SQLite是一个很是轻量级自包含(lightweight and self-contained)的DBMS,它可移植性好,很容易使用,很小,高效并且可靠。SQLite嵌入到使用它的应用程序中,它们共用相同的进程空间,而不是单独的一个进程。从外部看,它并不像一个RDBMS,但在进程内部,它倒是完整的,自包含的数据库引擎。sql
嵌入式数据库的一大好处就是在你的程序内部不须要网络配置,也不须要管理。由于客户端和服务器在同一进程空间运行。SQLite 的数据库权限只依赖于文件系统,没有用户账户的概念。SQLite 有数据库级锁定,没有网络服务器。它须要的内存,其它开销很小,适合用于嵌入式设备。你须要作的仅仅是把它正确的编译到你的程序。数据库
下面将介绍SQLite的使用:express
使用sqlite3 工具,经过手工输入SQL命令完成数据库建立,用户在Linux 的命令行界面中输入 sqlite3 可启动 sqlite3工具。bash
在代码中动态建立数据库。服务器
在程序执行过程当中,当须要进行数据库操做时,应用程序会首先尝试打开数据库,此时若是数据库并不存在,程序会自动创建数据库,而后打开数据库。网络
sqlite3 < *.db >app
在终端下运行 sqlite3 < *.db > 指令:工具
JonathandeMacBook-Pro:test jonathan$ sqlite3 message.db SQLite version 3.24.0 2018-06-04 14:10:15 Enter ".help" for usage hints. sqlite>
<*.db> 是要打开的数据库文件。若该文件不存在,则自动建立。ui
sqlite > .database命令行
sqlite> .database main: /Users/jonathan/test/message.db sqlite>
能够看到当前打开的数据库文件正是刚刚创建的 message.db文件;
sqlite > .tables
sqlite> .table user sqlite>
能够看到当前用户下有一个名为 user 的表;
sqlite > .schema <table_name>
sqlite> .schema user CREATE TABLE user(id integer, name, passwd interger); sqlite>
其实这里显示的正是咱们建立新表时输入的命令;
sqlite > .help
sqlite> .help .auth ON|OFF Show authorizer callbacks .backup ?DB? FILE Backup DB (default "main") to FILE Add "--append" to open using appendvfs. .bail on|off Stop after hitting an error. Default OFF .binary on|off Turn binary output on or off. Default OFF .cd DIRECTORY Change the working directory to DIRECTORY .changes on|off Show number of rows changed by SQL .check GLOB Fail if output since .testcase does not match .clone NEWDB Clone data into NEWDB from the existing database .databases List names and files of attached databases .dbconfig ?op? ?val? List or change sqlite3_db_config() options .dbinfo ?DB? Show status information about the database .dump ?TABLE? ... Dump the database in an SQL text format If TABLE specified, only dump tables matching LIKE pattern TABLE. ... ...
sqlite > .quit
sqlite> .quit JonathandeMacBook-Pro:test jonathan$
每一个命令以 ;结束
sqlite > create table <table_name> (f1 type1, f2 type2,...);
sqlite> CREATE TABLE user(id integer, name, passwd interger); sqlite>
type为数据类型:
NULL
INTEGER
REAL
TEXT
BLOB
注意:若未指定类型,默认是字符串,向表中添加新纪录时要加 “”;
sqlite > drop table <table_name>;
sqlite> .tables user sqlite> DROP TABLE user; sqlite> .tables sqlite>
能够看到原来有两个表 user与user2 ,使用 drop table user2 后能够看到 只剩下 user;
sqlite >select * from <table_name>;
sqlite> SELECT * FROM user ; 1|zhangsan|1 sqlite>
sqlite >select * from <table_name> where <expression>;
sqlite> SELECT * FROM user where id < 3; 1|zhangsan|1 sqlite>
这里的条件是 id < 2 ,能够看到 id < 3 的数据被挑选出来;
sqlite >insert into <table_name> values(value1,value2,...);
sqlite> INSERT INTO user VALUES(1,"zhangsan",1) VALUES(2,"lisi",2); Error: near "VALUES": syntax error sqlite> INSERT INTO user VALUES(1,"zhangsan",1); sqlite> SELECT * FROM user; 1|zhangsan|1 sqlite>
能够看到最新的记录被添加进去;
sqlite >delete from <table_name> where <expression>;
sqlite> SELECT * FROM user ; 1|zhangsan|1 sqlite> DELETE FROM user WHERE id=1; sqlite> SELECT * FROM user ; sqlite>
能够看到 passwd=1 的被删除;
sqlite > updata <table_name> set <f1=value1>,<f2=value2>... where <expression>;
sqlite> SELECT * FROM user ; 1|zhangsan|1 2|lisi|2 sqlite> UPDATE user SET name="xiaowang",passwd=3 WHERE id=1; sqlite> SELECT * FROM user ; 1|xiaowang|3 2|lisi|2 sqlite>
能够看到 id=3 的数据被更新。再次提醒,未定义类型的记录默认是字符串,添加时必定要用“” ;
sqlite > alter table <table> add column <field><type> defalut... ;
sqlite> SELECT * FROM user ; 1|xiaowang|3 2|lisi|2 sqlite> ALTER TABLE user add COLUMN age integer; sqlite> .schema user CREATE TABLE user(id integer, name, passwd interger, age integer); sqlite>
能够看到 age 被添加进去;