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

主要分为:读事务、写事务。
默认多个事务一起运行时,一个事务的非读操作需要等另一个事务(如果有语句执行)结束才能提交。

为了避免死锁,需要使用正确的事务类型,默认3种:
begin [deferred | immediate | exclusive] transaction;
其中:
deferred
是默认情况,直到必须使用时才获取锁。

immediate
在执行时试图获取预留锁,如果成功获取,其它事务无法修改数据库只能读,提交不会被阻碍,提交后其它事务可修改。

exclusive
试着获取对数据库的排它锁,只有等此事务任意操作完并提交后,其它事务才能开始执行查询或增删等语句。
exclusive比immediate更高的安全级别,immediate开始就不会产生死锁了。

函数

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

datetime(time, 'unixepoch', 'localtime')                          查询时间戳为本地时间

Sqlite 学习记录的更多相关文章

  1. [QT][SQLITE]学习记录一 querry 查询

    使用 QSqlQuery query ; query("SELECT id FROM TABLE1 WHERE id = '2017'); 的到的结果集就是query本身,此时需要使用 qu ...

  2. [QT][SQLITE]学习记录二 日期查询

    资料例程: 1.dongfangyu SQL时间段查询 : http://blog.csdn.net/dongfangyu/article/details/4607236 2.痕网 - henw  S ...

  3. SQLite学习笔记(七)&&事务处理

    说到事务一定会提到ACID,所谓事务的原子性,一致性,隔离性和持久性.对于一个数据库而言,通常通过并发控制和故障恢复手段来保证事务在正常和异常情况下的ACID特性.sqlite也不例外,虽然简单,依然 ...

  4. Sqlite学习笔记(四)&&SQLite-WAL原理

    Sqlite学习笔记(三)&&WAL性能测试中列出了几种典型场景下WAL的性能数据,了解到WAL确实有性能优势,这篇文章将会详细分析WAL的原理,做到知其然,更要知其所以然. WAL是 ...

  5. [ZHUAN]Flask学习记录之Flask-SQLAlchemy

    From: http://www.cnblogs.com/agmcs/p/4445583.html 各种查询方式:http://www.360doc.com/content/12/0608/11/93 ...

  6. Sqlite学习笔记(四)&&SQLite-WAL原理(转)

    Sqlite学习笔记(三)&&WAL性能测试中列出了几种典型场景下WAL的性能数据,了解到WAL确实有性能优势,这篇文章将会详细分析WAL的原理,做到知其然,更要知其所以然. WAL是 ...

  7. SQLite 学习笔记

    SQLite 学习笔记. 一.SQLite 安装    访问http://www.sqlite.org/download.html下载对应的文件.    1.在 Windows 上安装 SQLite. ...

  8. Android学习记录(3)—Android中ContentProvider的基本原理学习总结

    一.ContentProvider简介        当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据.虽然使用其他方法也可以对外共享数据 ...

  9. SQlite 学习资料

      很有用的开源跨平台数据库,可以作为客户端的小型内存数据库使用,据说它有N多用户(Nokia's Symbian,Mozilla,Abobe,Google,阿里旺旺,飞信,Chrome,FireFo ...

随机推荐

  1. USB HID描述符【转】

    本文转载自: USB是个通用的总线,端口都是统一的.但是USB设备却各种各样,例如USB鼠标,USB键盘,U盘等等,那么USB主机是如何识别出不同的设备的呢?这就要依赖于描述符了.USB的描述符主要有 ...

  2. Hadoop3.0新特性介绍,比Spark快10倍的Hadoop3.0新特性

    Hadoop3.0新特性介绍,比Spark快10倍的Hadoop3.0新特性 Apache hadoop 项目组最新消息,hadoop3.x以后将会调整方案架构,将Mapreduce 基于内存+io+ ...

  3. Aspose.Words操作word生成PDF文档

    Aspose.Words操作word生成PDF文档 using Aspose.Words; using System; using System.Collections.Generic; using ...

  4. 使用Jconsole监控weblogic的配置方法

    在项目中发现full gc非常频繁.达到了每分钟13次.我怀疑可能会有内存泄露.于是在晚上找了内存泄露的资料. 内存长期占用并导致系统不稳定一般有两种可能: 1. 对象被大量创建而且被缓存,在旧的对象 ...

  5. ecshop后台增加模板页的方法

    CShop的动态模板机制是一个非常灵活的系统,管理员可以在后台根据自己的要求调整模板模块的显示位置.本文详细讲解了如何修改ECSHOP内部结构使得用户可以添加自己的模板页从而方便灵活的使用系统自带的模 ...

  6. 关于hibernate对应关系之后取值的问题

    hibernate对应关系之后取值,比如一对一关系,取不到值,需要检查PO类中是否生成了getter及setter方法.

  7. 【转】Tomcat调优指南

    转载地址:http://blog.csdn.net/woohooli/article/details/3954792 1          概述 本文档主要介绍了Tomcat的性能调优的原理和方法.可 ...

  8. 树形结构的数据库表Schema设计

    今天又有幸遇到一个不知道的东西,那就是树型结构在数据库表中设计的问题.由于只是阅读了人家的东西,就直接给连接吧. 第一个:http://blog.csdn.net/monkey_d_meng/arti ...

  9. 使用oracle写if判断

    DECLARE L_X INT; BEGIN SELECT COUNT(*) INTO L_X FROM SYSTEMROLEFUNCTION WHERE ROLEID = '1'; IF L_X & ...

  10. mongoDB Replica集群配置(1主+1从+1仲裁)

    1.mongoDB节点介绍 主节点(Primary) 在复制集中,主节点是唯一能够接收写请求的节点.MongoDB在主节点进行写操作,并将这些操作记录到主节点的oplog中.而从节点将会从oplog复 ...