0、簡介
sqlite3是一款主要用於嵌入式的輕量級數據庫
sqlite3存儲數據的類型
NULL:標識一個NULL值
INTERGER:整數類型
REAL:浮點數
TEXT:字符串
BLOB:二進制數
sqlite3存儲數據的約束條件
Sqlite常用約束條件如下:
PRIMARY KEY - 主鍵:
1)主鍵的值必須唯一,用於標識每一條記錄,如學生的學號
2)主鍵同時也是一個索引,通過主鍵查找記錄速度較快
3)主鍵如果是整數類型,該列的值可以自動增長
NOT NULL - 非空:
約束列記錄不能爲空,否則報錯
UNIQUE - 唯一:
除主鍵外,約束其他列的數據的值唯一
CHECK - 條件檢查:
約束該列的值必須符合條件纔可存入
DEFAULT - 默認值:
列數據中的值基本都是一樣的,這樣的字段列可設爲默認值
1、安裝sqlite3
sudo apt-get install sqlite3
查看版本信息
sqlite3 -version
2、新建或打開數據庫
# sqlite3 數據庫名字
sqlite3 student.db # 當前目錄下建立或打開student.db數據庫文件,並進入sqlite命令終端,以sqlite>前綴標識
3、數據庫命令(以"."開頭)
.help 輸出幫助信息
.database 查看數據庫文件信息
.tables 顯示錶
.schema 查看所有表
.schema <table_name> 查看指定表,顯示錶結構
.dump <table_name> 以sql語句的形式列出表內容
.separator <symble> 設置顯示信息的分隔符,如.separator :(默認爲"|")
.mode <mode_name> 設置顯示模式,如.mode column(默認爲list)
.width <width_value> 設置每一列的顯示寬度,如.width 2
.show 列出當前顯示格式的配置
.quit或.exit 退出sqlite終端
4、數據庫語句(以";"結尾,"--"表示註釋)
(1) 創建數據表:
# create table table_name(field1 type1, field2 type1, ...);
create table student (id int primary key,name char,age int,sex char); # 創建一個記錄學生信息的數據表student
(2) 向表中插入數據記錄:
# insert into <table_name> values (val1, val2, ...);
insert into student values (0,'alan_0',20,'m');
# insert into <table_name>(field1, field2, ...) values(val1, val2, ...);
insert into student(id, name, age, sex) values(1, 'alan_1', 20, 'm');
(3) 修改數據記錄
# update <table_name> set field1=val1, field2=val2 where expression; # where是sql語句中用於條件判斷的命令,expression爲判斷表達式
update student set name='alan_2', age=21 where name='alan_1';
(4) 查詢數據記錄
# select columns from <table_name> [where expression];
a)查詢輸出所有數據記錄
# select * from <table_name>;
select *from student;
b)限制輸出數據記錄數量
# select * from <table_name> limit val;
select *from student limit 10;
c)排序輸出數據記錄
# select * from <table_name> order by field asc;
select * from student order by age asc limit 10; # 升序,降序爲desc
d)條件查詢
# select * from <table_name> where expression;
select * from student where age<21 and sex='m'; # 按照某個條件查找and/or
# select * from table_name where field in ('val1', 'val2', 'val3');
select * from student where name in ('alan_0', 'alan_1');
# select * from table_name where field between val1 and val2;
select * from student where age between 20 and 21;
select * from student where name like 'alan%'; # ('%'符號是SQL的萬用字符)
e)查詢記錄數目
# select count (*) from <table_name>;
select count(*) from student; # 數據庫一共有多少筆資料
select count(*) from student where age > 20; # 年齡大於20的有幾個
f)區分列數據
note:有一些字段的值可能會重複出現,distinct去掉重複項,將列中各字段值單個列出。
# select distinct field from <table_name>;
select distinct sex from student;
g)查找某個字段(列信息)
# select field from <table_name>;
select id from student;
select name, age from student where name like 'alan%' and age >= 20 order by age desc limit 10; # 查所有名字以zhang開頭、年齡大於20、年齡大的優先列出、最多十筆,只列出名字和年齡
(5) 刪除數據記錄:
# delete from <table_name> [where expression]; # 不加判斷條件則清空表所有數據記錄
delete from student where name='alan_2';
(6) 建立索引
note: 當數據表存在大量記錄,索引有助於加快查找數據錶速度。建立完成後,sqlite3在對該字段查詢時,會自動使用該索引。
# create index <index_name> on <table_name>(field);
create index student_index on student(id); # 針對學生表id字段,建立一個索引
(7) 刪除索引
# drop index <index_name>;
drop index student_index;
(8) 添加一列
# alter table 表名 add 列名 數據類型;
alter table student add address char;
update student set address='beijing'; # 把地址字段全部更新爲beijing
(9) 刪除一列
note: sqlite3不支持刪除一列信息,可以把原來的表裏面的需要的列複製到一個新表,重新命名)
# create table 新表名 as select 列名1,列名2,列名3,列名4 from 舊錶名;
create table stu as select id, name, sex from student; # 選擇student表中的id,name,sex字段作爲新表的字段
(10) 重新命名錶
# alter table 舊錶名 rename to 新表名;
alter table stu rename to student_new;
(11) 刪除數據表
# drop table <table_name>;
drop table student_new;
5、其他sqlite的特別用法
# sqlite可以在shell底下直接執行命令
sqlite3 student.db "select * from student;"
# 輸出 HTML 表格
sqlite3 -html student.db "select * from student;"
# 將數據庫「倒出來」
sqlite3 student.db ".dump" >output.sql
# 利用輸出的資料,建立一個一模一樣的數據庫(加上以上指令,就是標準的SQL數據庫備份了)
sqlite3 student.db <output.sql
# 在大量插入資料時,你可能會需要先打這個指令:
begin;
# 插入完資料後要記得打這個指令,資料纔會寫進數據庫中:
commit;