登录  | 加入社区

黑狼游客您好!登录后享受更多精彩

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

查看: 845|回复: 0

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

[复制链接]

989

主题

989

帖子

0

现金

黑狼菜鸟

Rank: 1

积分
0
发表于 2020-12-24 04:10:47 | 显示全部楼层 |阅读模式 来自 法国

原标题:干货|Sqlite数据库知识必知必会(下篇)

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

前面几天给各人分享了MySQL数据库知识,没来得及看的小同伴可以前去:Mysql查询语句进阶知识集锦,一篇文章教会你举行Mysql数据库和数据表的根本操纵,关于数据库的安装可以参考:手把手教你举行Mysql5.x版本的安装及办理安装过程中的bug。

上篇文章重要给各人先容了Sqlite数据库的安装、图形化管理体系、根本数据范例、根本关键字和数据库的相干操纵,干货|Sqlite数据库知识必知必会(上篇),本日皮皮紧接上篇文章,继承给各人分享数据库知识,一起来看看吧。

媒介

前面我们学习了许多数据库,固然它们功能非常丰富,但是占用空间比力大,使得我们的体系负荷变大,这对于我们新手小白来说不是一个抱负的选择,于是乎,Sqlite闪亮登场,它受人喜好的真正缘故原由正是由于它充足小,无需安装和管理设置,简朴轻易上手,支持数据库的巨细也有2TB,充足我们个人开辟爱好者利用了。

一、数据表相干操纵

1).创建数据表

CREATE TABLE IF NOT EXISTS 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快速天生表,如下:

Cn9zoax2FK1pxBTX.jpg

pL9S9QwpFTpqUrfL.jpg

睁开全文

如许我们的表就创建乐成了。这里小编在软件中用的是DEMO这个数据文件,而在下令窗口中用的是TEST这个数据库文件,由于一个数据库文件不答应在两个位置打开的缘故。

2).删除表

-- DROP TABLE people;

3).表现表名

.tables

g8dX58D88AQjeJ9Q.jpg

4).数据表的增编削查

1)).增长

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

insert into student(ID,NAME,score,time) values(1406063,'任性的90后boy',90,'2020-07-06 12:23:32');

iNA4FFBr1PRSfJRw.jpg

这里我插入了三行数据,此中有一行报错是由于我利用了雷同的ID号,而我的数据库的ID号是不答应重复的,故而会报错,改成别的的就好了,假如你把ID设为自增的话,就不必要你去写了,这里我用到了自增,以是各人不必写Sqlite会主动添补进去的。这里也可以省掉字段名,直接写值,如下:

Laax85AXXa2AvO1R.jpg

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

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;

jhMN9PmUEH6UNSh6.jpg

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

kjncUkT1j3xNk1Z4.jpg

这下就完善多了。固然这种方法很不错,但是假如数据列许多的话就无法完全表现了,这个时间我们就必要设置列的宽度,如下:

.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

CJeF3absF92fVVAs.jpg

6).数据表的毗连

这里的毗连分为表里交织三种毗连,利用好了可以极大进步我们的工作服从。这里我们再次创建一张表,如下:

Y4BSsalE4EijakbE.jpg

1)).交织毗连

select * from people cross join woman;

fnjb0to6Jf9ovORm.jpg

2)).内毗连

select * from people inner join woman;

3)).外毗连

select * from people outer join woman;

注:Sqlite3只支持左外毗连。

7).表的复制

CREATE TABLE IF NOT EXISTS man as select * from people where 1=0;#复制表布局

CREATE TABLE IF NOT EXISTS 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';

HhI5z2wNvRv2rSMW.jpg

这里我们之前仅仅只是创建了一个索引,那就是”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;

g62IhtOtqiF5i56u.jpg

如许就可以直接输出视图字段的全部值了。

3).删除视图

drop view name;

7.触发器

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

create trigger 触发器 after(before) insert(delete update)

on 表1

begin

insert into 表2(表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那么强盛的数据,够用就好。

我是皮皮,假如以为文章不错,记得三连噢,各人有题目也可以点击下方的图片,加我挚友,交个朋侪也好呀~返回搜狐,检察更多

责任编辑:





上一篇:莫文蔚回应穿杜嘉班纳风波:没得赖,是疏忽,好忸怩 ...
下一篇:有人用了10年,多款输入法忽然下架!
您需要登录后才可以回帖 登录 | 加入社区

本版积分规则

 

QQ|申请友链|小黑屋|手机版|Hlshell Inc. ( 豫ICP备16002110号-5 )

GMT+8, 2024-5-3 00:44 , Processed in 0.119962 second(s), 47 queries .

HLShell有权修改版权声明内容,如有任何爭議,HLShell將保留最終決定權!

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表