SQLite浅析
SQLite是一个非常轻量级自包含(lightweight and self-contained)的DBMS,它可移植性好,很容易使用,很小,高效而且可靠。SQLite嵌入到使用它的应用程序中,它们共用相同的进程空间,而不是单独的一个进程。从外部看,它并不像一个RDBMS,但在进程内部,它却是完整的,自包含的数据库引擎。
嵌入式数据库的一大好处就是在你的程序内部不需要网络配置,也不需要管理。因为客户端和服务器在同一进程空间运行。SQLite 的数据库权限只依赖于文件系统,没有用户帐户的概念。SQLite 有数据库级锁定,没有网络服务器。它需要的内存,其它开销很小,适合用于嵌入式设备。你需要做的仅仅是把它正确的编译到你的程序。
下面将介绍SQLite的使用:
一、创建SQLite数据库
- 手工创建
使用sqlite3 工具,通过手工输入SQL命令完成数据库创建,用户在Linux 的命令行界面中输入 sqlite3 可启动 sqlite3工具。
- 代码创建
在代码中动态创建数据库。
在程序执行过程中,当需要进行数据库操作时,应用程序会首先尝试打开数据库,此时如果数据库并不存在,程序会自动建立数据库,然后打开数据库。
二、SQLite常用命令介绍
1. sqlite3 基本指令(通常以 . 开头)
a. 创建或打开一个数据库文件
sqlite3 < *.db >
在终端下运行 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> 是要打开的数据库文件。若该文件不存在,则自动创建。
b. 显示当前打开的数据库文件
sqlite > .database
sqlite> .database
main: /Users/jonathan/test/message.db
sqlite>
可以看到当前打开的数据库文件正是刚刚建立的 message.db文件;
c. 显示数据库中所有表名
sqlite > .tables
sqlite> .table
user
sqlite>
可以看到当前用户下有一个名为 user 的表;
d. 查看表的结构
sqlite > .schema <table_name>
sqlite> .schema user
CREATE TABLE user(id integer, name, passwd interger);
sqlite>
其实这里显示的正是我们创建新表时输入的命令;
e. 显示所有命令
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.
... ...
f. 退出 sqlite3
sqlite > .quit
sqlite> .quit
JonathandeMacBook-Pro:test jonathan$
2. SQL表操作命令
每个命令以 ;结束
a. 创建新表
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
注意:若未指定类型,默认是字符串,向表中添加新纪录时要加 “”;
b. 删除表
sqlite > drop table <table_name>;
sqlite> .tables
user
sqlite> DROP TABLE user;
sqlite> .tables
sqlite>
可以看到原来有两个表 user与user2 ,使用 drop table user2 后可以看到 只剩下 user;
c. 查询表中所有记录
sqlite >select * from <table_name>;
sqlite> SELECT * FROM user ;
1|zhangsan|1
sqlite>
d. 按指定条件查询表中记录
sqlite >select * from <table_name> where <expression>;
sqlite> SELECT * FROM user where id < 3;
1|zhangsan|1
sqlite>
这里的条件是 id < 2 ,可以看到 id < 3 的数据被挑选出来;
e. 向表中添加新纪录
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>
可以看到最新的记录被添加进去;
f. 按指定的条件删除表中记录
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 的被删除;
g. 更新表中记录
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 的数据被更新。再次提醒,未定义类型的记录默认是字符串,添加时一定要用“” ;
h. 在表中添加字段
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 被添加进去;