SQLite备忘录-01

SQLite是一个进程内的库,实现了自给自足的无服务器的零配置的事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库一样,您不需要在系统中配置。就像其他数据库,SQLite 引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接,随连随用。SQLite 直接访问其存储文件。不需要一个单独的服务器进程或操作的系统(无服务器的)。SQLite 不需要配置,这意味着不需要安装或管理。一个完整的 SQLite 数据库是存储在一个单一的跨平台的磁盘文件。SQLite 是非常小的,是轻量级的,完全配置时小于 400KiB,省略可选功能配置时小于250KiB。SQLite 是自给自足的,这意味着不需要任何外部的依赖。SQLite 事务是完全兼容 ACID 的,允许从多个进程或线程安全访问,这个说的是事务,SQLite使用 ANSI-C 编写的,并提供了简单和易于使用的 API,SQLite 可在 UNIX(Linux, Mac OS-X, Android, iOS)和 Windows(Win32, WinCE, WinRT)中运行。SQLite 支持 SQL92(SQL2)标准的大多数查询语言的功能。就是咱们所说的sql语句中的增删改查语法标准。

一. 局限性

在SQL92 不支持的特性如下所示:

特性 描述
RIGHT OUTER JOIN 只实现了 LEFT OUTER JOIN。
FULL OUTER JOIN 只实现了 LEFT OUTER JOIN。
ALTER TABLE 支持 RENAME TABLE 和 ALTER TABLE 的 ADD COLUMN variants 命令,不支持 DROP COLUMN、ALTER COLUMN、ADD CONSTRAINT。
Trigger 支持 支持 FOR EACH ROW 触发器,但不支持 FOR EACH STATEMENT 触发器。
VIEWs 在 SQLite 中,视图是只读的。您不可以在视图上执行 DELETE、INSERT 或 UPDATE 语句。
GRANT 和 REVOKE 可以应用的唯一的访问权限是底层操作系统的正常文件访问权限。

二. 数据库支持的数据类型

SQLite数据类型是一个用来指定任何对象的数据类型的属性,SQLite中的每一列,每个变量和表达式都有相关的数据类型,你可以在创建表的同时使用这些数据类型,SQLite的存贮类数据类型,每个存贮在SQLite数据库中的值都具有下面存贮类之一:NULL(null) Integer(带符号的整数) Real (浮点数)Text(文本,使用UTF-8存贮) Blob (值是一个blob数据,完全根据它的输入存贮)

lite
1
2
3
4
5
Integerintinteger,int2 ,int8)
text (character20),text)
Noneblob
realdoublefloat
numericboolean date

三. SQLite 命令

​ 与关系数据库进行交互的标准SQLite命令类似于SQL

​ DDL (数据库定义语言)

​ DML (数据库操纵语言)

​ DQL(数据库查询语言)

​ DCL (数据库控制语言)

​ DQL基本结构是有select子句,from子句,where子句组成的查询块

​ select 《字段名表》 from 《表或视图》 where 《查询条件》

​ DML数据库操纵语言

​ insert update delete

​ DDL数据库定义语言

​ 用来创建数据库中的各种对象(表,视图,索引,同义词等)

​ create table alter drop

​ 数据库定义语言是稳性提交的,不能rollback

​ DCL数据库控制语言

​ 用来授予或回收访问数据库的某种特权,并控制数据库操纵事务发生的 时间,效果,对数据实行监视等

​ 如 rollback commit

​ sql 语言是数据库的核心语言,是一个标准的数据语言,是面向集合的描述性非过程化语言,功能强,效率高,简单易学维护

四. SQLite语法

  • sqlite是不区分大小写的,但有特殊的情况
  • 以两个练习的—开始,并扩展到下一个换行符
  • 所有的语句必须以;结束

创建表

lite
1
create table

创建表的时候,我们需要在这里添加约束,约束的好处有很多

  • not null 确保某列不能有null值
  • default 约束 当某列没有指定值的时候,为该列提供默认值
  • unique 约束 确保某列中的所有值是不同的
  • promary key约束 唯一标识数据库表中的各行/记录
  • check 约束 check约束确保某列中的所有值满足一定的条件
  • ALTER TABLE 命令允许用户重命名表,或向现有表添加一个新的列。
  • 创建好约束之后,在想添加或者删除约束都是不可能的。
  • 重命名列,删除一列,或者从一个表中添加或者删除约束是不可能的

删除表

lite
1
drop table

drop table语句 用来删除表定义及其所有相关数据,索引,触发器,约束和该表的权限规范 使用此命令时要特别注意,因为一旦一个表被删除,表中所有信息也将永远丢失所以不支持事务的操作,因为没有回滚操作

插入表

lite
1
insert into table (…) values (…)

插入的数据可以是从其他表中查询出来的,也可以是自己插入的,或者是触发器插入的。

查找数据

lite
1
select column1,column2  from tableName

select语句用于从SQLite数据库表中获取数据,以结果表的形式返回数据,这些结果也被称为**结果集 **,这里的column1是表的字段,他们即是你想要获取的,如果获取所有的,可以用*

  • 查找所有的表
lite
1
SELECT tbl_name FROM SQLite_master WHERE type = 'table';
  • 查看表的完整信息
lite
1
SELECT sql FROM SQLite_master WHERE type = 'table' AND tbl_name = 'COMPANY';

运算符

​ 算术运算符(+,-,X,除,取模),比较运算符(==  , = , != ,<>,>,<,>=,<=,!<,!>),逻辑运算符 (and ,between,esists,in,not in ,like,glob,not ,or , is null, is ,|| ,unique)

表达式

​ 表达式是一个或多个值,运算符和计算值的sql函数的组合,sql表达式与公式类似,都写在查询语言中

  • bool表达式

      在匹配单个值的基础上获取数据
    
1
matching

WHERE

1
select * from table where (子句)

UPDATE

​ update 查询用于修改表中已有的记录,可以使用带有where子句的update 查询来更新选定行,否则所有的行都会被更新

​ update table set (key1 = value1 ,key2 = value2) where 。如果更改所有的值,就不需要传where子句

DELETE

​ delete 查询用于删除表中的已有记录,可以使用where子句的delete查询来删除选定行,否则所有的记录都被删除

1
delete from table  where

LIKE

lite
1
2
3
SELECT column_list 
FROM table_name
WHERE column LIKE ‘_XXXX_'

%代表0个 一个 或者多个,下划线 表示一个

GLOB

​ 用法类似 like (* ?)

​ 星号,问号

lite
1
2
SELECT FROM table_name
WHERE column GLOB 'XXXX*'

LIMIT

​ limit子句用于限制由select语句返回的数据数量

lite
1
2
3
4
SELECT column1, column2, columnN 
FROM table_name
LIMIT [no of rows] OFFSET [row num]
SELECT * FROM COMPANY LIMIT 3 OFFSET 2;

ORDER BY

order by 子句是用来基于一个或多个列按照升序和降序顺序排列

lite
1
2
3
4
5
SELECT column-list 
FROM table_name
[WHERE condition]
[ORDER BY column1, column2, .. columnN] [ASC | DESC];
# 默认是升序

GROUP BY

SQLite的gruop by 子句用于与select语句一起使用,来对相同的数据进行分组

lite
1
2
3
4
5
SELECT column-list
FROM table_name
WHERE [ conditions ]
GROUP BY column1, column2....columnN
ORDER BY column1, column2….columnN

按照名字分组的话,那么产生的数据中,name就只能出现一次

1
SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME;

group by 和 order by一起使用

lite
1
2
SELECT NAME, SUM(SALARY) 
FROM COMPANY GROUP BY NAME ORDER BY NAME DESC;

HAVING

HAVING 子句允许指定条件来过滤将出现在最终结果中的分组结果。

WHERE 子句在所选列上设置条件,而 HAVING 子句则在由 GROUP BY 子句创建的分组上设置条件。

​ SELECT

​ FROM

​ WHERE

​ GROUP BY

​ HAVING

​ ORDER BY

​ SELECT * FROM COMPANY GROUP BY name HAVING count(name) < 2;

DISTINCT

​ SQLite 的 DISTINCT 关键字与 SELECT 语句一起使用,来消除所有重复的记 录,并只获取唯一一次记录。

​ 有可能出现一种情况,在一个表中有多个重复的记录。当提取这样的记录时,DISTINCT 关键字就显得特别有意义,它只获取唯一一次记录,而不是获取重复记录。

lite
1
2
3
SELECT DISTINCT column1, column2,.....columnN 
FROM table_name
WHERE [condition]