Sqlite 学习记录

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 //输出执行的语句

//导出为sql文件
.output file.sql
.dump
.output stdout

//导入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.db

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’);

.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

要分为:读事务、写作业。
默认多独工作sqlite并运行时,一个作业之非读操作需要相当其余一个业务(如果来告知句执行)结束才能够交付。

为了避免死锁,需要采取科学的作业型,默认3种植:
begin [deferred | immediate | exclusive] transaction;
其中:
deferred
大凡默认情况,直到必须用时才得锁。

immediate
于实施时拟拿走预留锁,如果成功获,其它工作无法修改数据库只能读,提交不会见受挡,提交后外事情可改。

exclusive
试跳着收获对数据库的解它锁,只有当这个工作任意操作结束并交后,其它业务才会开推行查询或增删等话语。
exclusive比immediate更胜似的安全级别,immediate开始就是不见面生死锁了。

 

函数

======================================================================================

datetime(time, ‘unixepoch’, ‘localtime’)                        
 查询时穿为当地时间

 

网站地图xml地图