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

相關文章
相關標籤/搜索