Sqlite命令行(CLP)
======================================================================================
.help //獲取幫助,會列出可用命令,以下:
.ver //得到版本
.open test.db //打開數據庫文件
.save test.db //保存一個數據庫或新建
.database //獲取當前目錄下存在的數據庫文件,一個文件表示一個數據庫
.tables //獲取表列表
.indices test //獲取表的索引列表
.schema test //提供表名則獲取表建立語句,不提供則獲取全部表,查詢sqlite_master系統視圖也可
.show //獲取用戶shell定義的設置
.nullvale NULL //設置null顯示爲NULL
.echo on //輸出執行的語句html
//導出爲sql文件
.output file.sql
.dump
.output stdoutsql
//導入sql文件
drop table test;
drop view schema;
.read file.sql
或者直接在命令行中用:
sqlite3 test.db .dump > test.sql
sqlite3 test.db < test.sql
sqlite3 -init test.sql test.dbshell
create table test(id integer primary key, value text); //id主鍵且自增
create index test_idx on test(value) //建立索引。數據庫
//簡單增刪改查詢,和Mysql相似
insert into test(id,value)values(1, 'testz');
insert into test(value)values('testz');express
.mode column //查詢結果顯示列,可選格式:csv,html,insert,line,tabs,tcl,默認爲list
.headers on //顯示頭部信息(包含.mode column)
select * from test; //查詢數據,不顯示列名的
select last_insert_rowid(); //獲取最後插入的ID安全
//結果輸出爲csv,其中.mode csv也能夠用.dump輸出備份sql
.output file.csv
.mode csv //或用.separator ,
select * from test;
.output stdout函數
//導入到test2表
create table test2(id integer primary key, value text);
.import text.csv test2工具
//備份源文件,二進制文件,但沒sql移植好
sqlite3 test.db vacuum
cp test.db test.Backup命令行
工具
======================================================================================
sqlite3_analyzer 可獲取數據庫磁盤結構的詳細技術信息。設計
SQL
======================================================================================
使用;做爲命令終結符。
select * from test;
insert into test(value)values('testz');
delete from test where id =1;
update teable set value="zz" where id=3
//不少和Mysql語法相似,如 :
like "%test%"、count(*)、group by、having、distinct、as、in、子查詢、複合查詢、
//讀一行從第一行開始。desc或asc,可忽略offset。
select * from test order by desc id limit 1 offset 1
//相似MYSQL的左鏈接
select * from test a left outer join testb b on a.id=b.id;
字段設計
======================================================================================
日期的默認值:
current_date YYYY-MM-DD
current_time HH::MM::SS
current_timestamp YYYY-MM-DD HH:MM:SS
//check約束,小於7個字符就報錯。
create table test(
id integer primary key,
name text not null default 'zzz',
unique(name),
check(length(name)>=7));
//外鍵test_types表的id
create table test(
id integer primary key,
type_id integer references test_types(id)
on delete restrict //父ID被刪時,此數據不刪除。
deferrable initially deferred,
name text);
完整規則:
set null:若是父值被刪除或不存在,剩餘子值改成null。
set default:若是父值被刪除或不存在,剩餘子值改成默認值。
casecade:更新或刪除父值時則子值也被更新或刪除。
restrict:更新或刪除父值,可能會出現孤立的子值,從而阻止事務。
no action:不干涉操做執行,只觀察變化。
deferrable:當即強制實施仍是延遲到整個事務結束時。
//關於字段類型
經過值的表示法來判斷其類型。有5類型:integer、real(浮點)、text、blob(二進制x開頭帶引號)、null
一個字段能夠存儲不一樣類型的值。
select typeof(3.14) 查詢其類型
索引
======================================================================================
//建立name大小寫不敏感的索引
create index a_idx test(name collate nocase);
//使用單個字段索引的狀況: idx on test(a)
column {=|>|>=|<=|<} expression
expression {=|>|>=|<=|<} column
column IN (expression-list)
column IN (subquery)
//多字段索引的狀況: idx on test(a,b,c,d)
只有a和b使用了索引
select * from test where a=1 and b=2 and d=3
表達式a>1稱爲最右邊的索引字段,由於用了不等號,後面的查詢條件沒法使用索引。
select * from test where a>1 and b=2 and c=3 and d=3
事務
======================================================================================
begin,commit,rollback
主要分爲:讀事務、寫事務。
默認多個事務一塊兒運行時,一個事務的非讀操做須要等另外一個事務(若是有語句執行)結束才能提交。
爲了不死鎖,須要使用正確的事務類型,默認3種:
begin [deferred | immediate | exclusive] transaction;
其中:
deferred
是默認狀況,直到必須使用時才獲取鎖。
immediate
在執行時試圖獲取預留鎖,若是成功獲取,其它事務沒法修改數據庫只能讀,提交不會被阻礙,提交後其它事務可修改。
exclusive
試着獲取對數據庫的排它鎖,只有等此事務任意操做完並提交後,其它事務才能開始執行查詢或增刪等語句。
exclusive比immediate更高的安全級別,immediate開始就不會產生死鎖了。
函數
======================================================================================
datetime(time, 'unixepoch', 'localtime') 查詢時間戳爲本地時間