干货|Sqlite数据库知识必知必会(下篇)

大家好,我是IT共享者,人称皮皮。

前面几天给大家分享了MySQL数据库知识,没来得及看的小伙伴可以前往:Mysql查询语句进阶知识集锦,一篇文章教会你进行Mysql数据库和数据表的基本操作,关于数据库的安装可以参考:手把手教你进行Mysql5.x版本的安装及解决安装过程中的bug。

上篇文章主要给大家介绍了Sqlite数据库的安装、图形化管理系统、基本数据类型、基本关键字和数据库的相关操作,干货|Sqlite数据库知识必知必会(上篇),今天皮皮紧接上篇文章,继续给大家分享数据库知识,一起来看看吧。

前言

前面我们学习了很多数据库,虽然它们功能非常丰富,但是占用空间比较大,使得我们的系统负荷变大,这对于我们新手小白来说不是一个理想的选择,于是乎,Sqlite闪亮登场,它受人喜爱的真正原因正是因为它足够小,无需安装和管理配置,简单容易上手,支持数据库的大小也有2TB,足够我们个人开发爱好者使用了。

一、数据表相关操作

1).创建数据表

CREATE TABLE student (
ID INTEGER DEFAULT '1406061' PRIMARY KEY AUTOINCREMENT NOT NULL,
NAME NVARCHAR(100)  UNIQUE NOT NULL,
score INTEGER  NOT NULL,
time TIMESTAMP  NOT NULL
);

我们可以使用SqliteAdmin快速生成表,如下:

干货|Sqlite数据库知识必知必会(下篇)

干货|Sqlite数据库知识必知必会(下篇)

这样我们的表就建立成功了。这里小编在软件中用的是DEMO这个数据文件,而在命令窗口中用的是TEST这个数据库文件,因为一个数据库文件不允许在两个位置打开的缘故。

2).删除表

DROP TABLE people;

3).显示表名

.tables
干货|Sqlite数据库知识必知必会(下篇)

4).数据表的增删改查

1)).增加

这里我们可以给刚创建的表添加一个数据,如下:

insert into student(ID,NAME,score,time) values(1406063,'任性的90后boy',90,'2020-07-06 12:23:32');
干货|Sqlite数据库知识必知必会(下篇)

这里我插入了三行数据,其中有一行报错是因为我使用了相同的ID号,而我的数据库的ID号是不允许重复的,故而会报错,改成其它的就好了,如果你把ID设为自增的话,就不需要你去写了,这里我用到了自增,所以大家不必写Sqlite会自动填充进去的。这里也可以省掉字段名,直接写值,如下:

干货|Sqlite数据库知识必知必会(下篇)

我们还可以给表添加新列,如下;

alter table people add  column aa char(10);#添加列并且列名为aa

注:Sqlite3并不支持带有UNIQUE约束的列

2)).删除

delete from people;#删除表数据
delete from people where score<20#删除people数据表score数值小于20的记录

3)).修改

其实就是更新操作,如下;

update people set score=100 where  age=46;#当age=46时score设置为100

4)).查找

查找不管是在哪个数据库中方法都是相当多的,因为查询操作是最常见也是最频繁的,下面我们就来详细说说:

1))).查询所有的结果

select * from student;
干货|Sqlite数据库知识必知必会(下篇)

我们可以看到虽然结果打印出了,但是并不是那么美观,我们将它的打印格式化一下,如下;

干货|Sqlite数据库知识必知必会(下篇)

这下就完美多了。虽然这种方法很不错,但是如果数据列很多的话就无法完全显示了,这个时候我们就需要设置列的宽度,如下:

.width 10 20 15

2))).查询指定结果

select NAME,score from student; #打印出NAME和score列的结果
select * from people where score<20 and age<40;#当score小于20并且age小于40的时候
select *from people where score between 10 and 30;#当score为10~30之间时
select *from people where NAME LIKE '放大%';#当name的开始处含有放大
select *from people where NAME glob '放大*';#与上同
select *from where score not in(12,23);#当score不属于12~23

3))).查找排序

select * from people order by score desc; #对score降序排序

4))).查找指定数量的数据

select * from people  limit 3 offset 2#偏移2个单位然后输出三行数据,其实就是输出后三行数据

5))).查找重复数据并消除

select distinct * from people where score>10;#当score大于10的时候消除重复数据

6))).查找数据并进行分组

select NAME ,max(age) from people where score>10 group by age#返回score大于10的时候age的最大值

7))).查找数据进行分组并过滤分组

select NAME ,max(age) from people where score>10 group by age having count(NAME)>1;#名称计数大于1

5).表的重命名

alter table people rename to man;#将表名people改为man
干货|Sqlite数据库知识必知必会(下篇)

6).数据表的连接

这里的连接分为内外交叉三种连接,使用好了可以极大提高我们的工作效率。这里我们再次创建一张表,如下:

干货|Sqlite数据库知识必知必会(下篇)

1)).交叉连接

select * from people cross join woman;
干货|Sqlite数据库知识必知必会(下篇)

2)).内连接

select * from people inner join woman;

3)).外连接

select * from people outer join woman;

注:Sqlite3只支持左外连接。

7).表的复制

create table man as select * from people where 1=0;#复制表结构
create table woman as select * from people;#复制表结构和数据

8).临时表

有时候我们不需要存储所有表的数据,这个时候临时表就很有使用的必要了。如下:

#创建一个临时表
create  temporary table temp_table(
    id int primary key,
    name varchar(50) unique not null,
    age int not null
);


#查看临时表
temp.temp_table


#删除临时表
drop table temp.temp_table;

5.索引操作

1).创建索引

create index user on people(score);#在people表的score字段上设置索引
create unique name on people(NAME);#在people表的score字段上设置唯一索引
create index pa on people(score,age)#在people表的score和age字段上设置索引

2).查看索引

SELECT * FROM sqlite_master WHERE type = 'index';
干货|Sqlite数据库知识必知必会(下篇)

这里我们之前仅仅只是创建了一个索引,那就是”user“,为何会有两个索引了,而且最上面的索引好像跟我们并没有什么关系,也不像是自己创建的,其实,这个就是隐式索引,这个隐式索引在我们创建表的时候就连带着一起创建了的,只是为了让查询更加快速而已,影响不大。

3).使用索引

这里涉及到两个关键字请配套使用,表示索引来自于哪里的意思。

select * from people indexed by user where score>10;

4).删除索引

drop index user;

注:数据量较小不应使用索引,以免给系统增压。

6.视图操作

1).创建视图

create view name as select NAME from people;#创建NAME字段的视图

2).使用视图

select *from name;
干货|Sqlite数据库知识必知必会(下篇)

这样就可以直接输出视图字段的所有值了。

3).删除视图

drop view name;

7.触发器

触发器就是使得多个表的交互增强,互相调用,满足条件就调用哪个表,语法格式如下:

create trigger 触发器 after(before) insert(delete update)
on1
begin
insert into2(表2字段,表2字段,n) VALUES(表1值, 表1值,,,,n);
END;

1).创建触发器

#给people表创建一个触发器
create trigger cf
after insert on people
begin
insert into woman(w_ID,NAME,SCORE,date) values(new.ID,'向前插入',100,datetime('now'));
end;

2).查看触发器

select * from sqlite_master where type = 'trigger'AND tbl_name='people';#查看people表的触发器

3).删除触发器

drop trigger cf;

8.事务

有了事务可以让我们的Sqlite语句工作的更加有条不紊,一般大致分为事务开始 提交 回滚 结束,下面来看看:

begin;#开始
insert into people('gf',65,datetime('now'));
rollback; #回滚就是撤销
COMMIT;提交保存数据
end;#结束

这里的数据没有插入到“people”表中哦,是不是超级简单了?

二、总结

这篇文章主要介绍了Sqlite数据库的数据表、索引、视图、触发器和事务操作知识,干货满满。

皮皮自从学过Sqlite之后,就果断卸载了Mysql和Mongo了,主要是目前还用不着Mysql数据库和Mongo那么强大的数据,够用就好。

我是皮皮,如果觉得文章不错,记得三连噢,大家有问题也可以点击下方的图片,加我好友,交个朋友也好呀~

干货|Sqlite数据库知识必知必会(上篇)

大家好,我是IT共享者,人称皮皮。

前面几天给大家分享了MySQL数据库知识,没来得及看的小伙伴可以前往:Mysql查询语句进阶知识集锦,一篇文章教会你进行Mysql数据库和数据表的基本操作,关于数据库的安装可以参考:手把手教你进行Mysql5.x版本的安装及解决安装过程中的bug,今天皮皮继续给大家分享数据库知识,但是换了一个主角,它就是Sqlite。

前言

前面我们学习了很多数据库,虽然它们功能非常丰富,但是占用空间比较大,使得我们的系统负荷变大,这对于我们新手小白来说不是一个理想的选择,于是乎,Sqlite闪亮登场,它受人喜爱的真正原因正是因为它足够小,无需安装和管理配置,简单容易上手,支持数据库的大小也有2TB,足够我们个人开发爱好者使用了。

一、安装

既然要学Sqlite,首先我们先安装它们,前面我们说过,安装它们无需太多过程,即免安装,下载地址:

https://u062.com/dir/7715018-39794633-fbf2ca

我们下载好后直接将Sqlite的应用程序加入到环境变量中即可随意使用了,打开CMD,看到这种字样,表示安装成功,如图:

二、图形化界面管理

Sqlite已经安装上了,但是在命令提示符窗口操作总感觉不美观,小编想这时候应该需要一个图形界面工具来操纵Sqlite,这样就能更直观的显示数据了,这里我推荐SqliteAdmin,中文版的界面再加上简洁的界面设计,如图:

注意,此时的软件还无法正常工作,因为它还没有可以解析Sqlite语句的动态链接库,所以你还需要下载个动态链接库,这里小编已经准备好了下载地址了,下载后直接复制到软件的目录即可,下载地址:

https://u062.com/file/7715018-452195159

三、基本语法

Sqlite不像其它的数据库以“;”结尾,而且它是以“.”开头使得式子成立的。打开我们的SqliteAdmin,下面开始我们的装逼之旅。

1.数据类型

Null         空值
SMALLLINT    短整型
INTEGER      带符号的整数 这个就是布尔类型 0(false)和 1(true)
TINYINT      长整型
REAL         浮点值
TEXT         大量文本字符串
BLOB         二进制对象       
NUMERIC      使用所有五个存储类的值
VARCHAR(n)   变动长度字符串,只能存英文,最多8000个字符
CHAR(n)      固定长度字符串
DATA         年月日
TIME         时分秒
DOUBLE       双精度浮点数
FLOAT        单精度浮点数
TIMESTAMP    存储年月日时分秒
NCHAR        存储Unicode数据类型的固长字符串 ,可存英文汉字,做多4000个字符
NVARCHAR 存储Unicode数据类型的变长字符串
NTEXT        存储Unicode数据类型的大量文本字符串
DATATIME     存储日期时间

其实它的数据类型远不止这些,更多的数据类型需要大家发掘,这里小编列举只是常用的数据类型罢了。

2.基本关键字

了解了数据类型,在创建数据库时用于操作时需要配套使用的关键字当然也必须得了解,这样才能提高开发效率。

AND   




BETWEEN  最小值和最大值之间




EXISTS 判断是否存在




IN  判断某个值是否属于另一个值




NOT IN 判断某个值是否不属于另一个值




LIKE 使用通配符比较值与另一个值 不区分大小写 %(表示零个,一个或者多个)  _(表示一个)




GLOB  使用通配符将值与类似值进行比较,并区分大小写的 *(表示零个或多个)     ?(表示一个)




LIMIT  限制满足条件的值的数量




ORDER BY 排序  ASC(升序) | DESC(降序)




GROUP BY  数据聚合




HAVING   过滤分组,使用前一定要使用GROUP BY




DISTINCT   消除所有重复记录






NOT  不,常和in一起用




OR   




IS NULL  判断是否等于空值,类型运算符




IS  相当于‘=’




IS NOT  判断是否不等于 相当于“!=”




UNIQUE    不重复


UNION     消除所有重复行


UNIONALL  不消除重复行


WHERE   用于满足某个条件时


SELECT  选择


FROM   来自


INSERT INTO 插入表数据


PRIMARY Key  主列


DEFAULT 默认值


CHECK 检查

3.数据库相关操作

1).创建数据库文件

首先我们要创建一个数据库文件,以“.db”结尾的文件,如下:

我们还可以在命令提示符里面创建数据库,如下所示:

这样就创建了一个”test”的数据库文件了,我们创建之后我们就进入了”test”数据库中了,然后就可以进行其它操作了。

2).查看数据库

.database   .databases 两者即可

3).退出数据库

.quit

4).导出数据库

sqlite3 test.db .dump > test.sql

5).创建附加数据库

ATTACH DATABASE 'test1.db' as 'test1';
ATTACH DATABASE 'test2.db' as 'test2';

上述操作是将所有数据库数据都存放在了数据库文件“test.db”中了,不过实际开发中不建议这么做,建议多做几个数据库,或者将数据库嵌入到其它数据库中。

6).显示附加数据库

.database   .databases 两者即可

7).分离数据库

DETACH DATABASE 'test1';

四、总结

这篇文章主要介绍了Sqlite数据库的安装、图形化管理系统、基本数据类型、基本关键字和数据库的相关操作,介绍了创建数据库、查看数据库、退出数据库、导出数据库、创建附加数据库、显示附加数据库和分离数据库的方法,干货多多。下一篇文章继续给大家分享Sqlite数据库的数据表、索引、视图、触发器和事务操作知识,敬请期待!