Sqlite - SQLite浅析

SQLite浅析

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

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

下面将介绍SQLite的使用:express

1、建立SQLite数据库

  1. 手工建立

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

  2. 代码建立

    在代码中动态建立数据库。服务器

    在程序执行过程当中,当须要进行数据库操做时,应用程序会首先尝试打开数据库,此时若是数据库并不存在,程序会自动创建数据库,而后打开数据库。网络

2、SQLite经常使用命令介绍

1. sqlite3 基本指令(一般以 . 开头)

a. 建立或打开一个数据库文件

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

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