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