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数据,完全根据它的输入存贮)
1 | Integer (int,integer,int2 ,int8) |
三. 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是不区分大小写的,但有特殊的情况
- 以两个练习的—开始,并扩展到下一个换行符
- 所有的语句必须以;结束
创建表
1 | create table |
创建表的时候,我们需要在这里添加约束,约束的好处有很多
- not null 确保某列不能有null值
- default 约束 当某列没有指定值的时候,为该列提供默认值
- unique 约束 确保某列中的所有值是不同的
- promary key约束 唯一标识数据库表中的各行/记录
- check 约束 check约束确保某列中的所有值满足一定的条件
- ALTER TABLE 命令允许用户重命名表,或向现有表添加一个新的列。
- 创建好约束之后,在想添加或者删除约束都是不可能的。
- 重命名列,删除一列,或者从一个表中添加或者删除约束是不可能的
删除表
1 | drop table |
drop table语句 用来删除表定义及其所有相关数据,索引,触发器,约束和该表的权限规范 使用此命令时要特别注意,因为一旦一个表被删除,表中所有信息也将永远丢失所以不支持事务的操作,因为没有回滚操作
插入表
1 | insert into table (…) values (…) |
插入的数据可以是从其他表中查询出来的,也可以是自己插入的,或者是触发器插入的。
查找数据
1 | select column1,column2 from tableName |
select语句用于从SQLite数据库表中获取数据,以结果表的形式返回数据,这些结果也被称为**结果集 **,这里的column1是表的字段,他们即是你想要获取的,如果获取所有的,可以用*
- 查找所有的表
1 | SELECT tbl_name FROM SQLite_master WHERE type = 'table'; |
- 查看表的完整信息
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
1 | SELECT column_list |
%代表0个 一个 或者多个,下划线 表示一个
GLOB
用法类似 like (* ?)
星号,问号
1 | SELECT FROM table_name |
LIMIT
limit子句用于限制由select语句返回的数据数量
1 | SELECT column1, column2, columnN |
ORDER BY
order by 子句是用来基于一个或多个列按照升序和降序顺序排列
1 | SELECT column-list |
GROUP BY
SQLite的gruop by 子句用于与select语句一起使用,来对相同的数据进行分组
1 | SELECT column-list |
按照名字分组的话,那么产生的数据中,name就只能出现一次
1 | SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME; |
group by 和 order by一起使用
1 | SELECT NAME, SUM(SALARY) |
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 关键字就显得特别有意义,它只获取唯一一次记录,而不是获取重复记录。
1 | SELECT DISTINCT column1, column2,.....columnN |