Sqlite-SQLite浅析

56次阅读

共计 3334 个字符,预计需要花费 9 分钟才能阅读完成。

SQLite 浅析

SQLite 是一个非常轻量级自包含 (lightweight and self-contained) 的 DBMS,它可移植性好,很容易使用,很小,高效而且可靠。SQLite 嵌入到使用它的应用程序中,它们共用相同的进程空间,而不是单独的一个进程。从外部看,它并不像一个 RDBMS,但在进程内部,它却是完整的,自包含的数据库引擎。

嵌入式数据库的一大好处就是在你的程序内部不需要网络配置,也不需要管理。因为客户端和服务器在同一进程空间运行。SQLite 的数据库权限只依赖于文件系统,没有用户帐户的概念。SQLite 有数据库级锁定,没有网络服务器。它需要的内存,其它开销很小,适合用于嵌入式设备。你需要做的仅仅是把它正确的编译到你的程序。

下面将介绍 SQLite 的使用:

一、创建 SQLite 数据库

  1. 手工创建

    使用 sqlite3 工具,通过手工输入 SQL 命令完成数据库创建,用户在 Linux 的命令行界面中输入 sqlite3 可启动 sqlite3 工具。

  2. 代码创建

    在代码中动态创建数据库。

    在程序执行过程中,当需要进行数据库操作时,应用程序会首先尝试打开数据库,此时如果数据库并不存在,程序会自动建立数据库,然后打开数据库。

二、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 被添加进去;

正文完
 0