大家好,我是IT分享达人,人称皮皮。前几天跟大家分享了mysql数据库知识。还没来得及看的小伙伴可以前往:Mysql查询语句进阶知识宝典。一篇文章教你Mysql数据库和数据表的基本操作。数据库安装可以参考:手把手教你安装Mysql5.x版本,解决安装过程中的bug。上一篇主要介绍了Sqlite数据库的安装、图形化管理系统、基本数据类型、基本关键字以及数据库的相关操作。干货|Sqlite数据库知识一定要知道(上),今天皮皮会在上一篇继续给大家分享数据库知识,一起来看看吧。前言我们学过很多数据库。虽然它们非常实用,但它们占用了大量空间,这增加了我们系统的负载。这对于我们这些新手小白来说并不是一个理想的选择,于是Sqlite登场了。真正受欢迎的原因是因为它足够小,无需安装和管理配置,简单易用,支持的数据库大小为2TB,足够我们个人开发爱好者使用。一、数据表相关操作1).创建数据表CREATETABLEStudent(IDINTEGERDEFAULT'1406061'PRIMARYKEYAUTOINCREMENTNOTNULL,NAMENVARCHAR(100)UNIQUENOTNULL,scoreINTEGERNOTNULL,timeTIMESTAMPNOTNULL);我们可以使用SqliteAdmin快速生成表,如下:这样,我们的表就创建成功了。这里小编在软件中使用DEMO数据文件,命令窗口中使用TEST数据库文件,因为一个数据库文件不允许在两个位置打开。2).删除表DROPTABLEpeople;3).显示表名.tables4).数据表的增删改查1).Increase这里我们可以在新建的表中添加一条数据,如下:insertintostudent(ID,NAME,score,time)values(1406063,'任性90后男生',90,'2020-07-0612:23:32');这里我插入了三行数据,其中一行报错是因为我用的是同一个ID号,而我的数据库的ID号是不允许重复的,所以会报错,改成别的就行了,如果你把ID设置为自增就不用写了,我这里用的是自增,所以不用写Sqlite,会自动填上。这里也可以省略字段名,直接写值,如下:我们也可以在表中增加新的列,如下;altertablepeopleaddcolumnaachar(10);#添加一列,列名为aa注:Sqlite3不支持带UNIQUE约束的列2)).Deletedeletefrompeople;#删除表数据deletefrompeoplewherescore<20#删除people数据表中score值小于20的记录3)).Modification其实就是一个update操作,如下;updatepeoplesetscore=100whereage=46;#whenage=46将其设置为1004))。无论是在哪个数据库中,查找的方法都相当多,因为查询操作是最常见和最频繁的。下面详细说说:1)))。查询所有结果select*fromstudent;我们可以看到虽然打印出了结果,但是并没有那么漂亮。让我们格式化如下;这样就完美多了。这种方法虽然很好,但是如果数据列很多,就无法完整显示。这时候我们需要设置列的宽度,如下:.width1020152)))。查询指定结果selectNAME,scorefromstudent;#打印出NAME和score列的结果select*frompeoplewherescore<20andage<40;#当score小于20且age小于40时,select*frompeoplewherescorebetween10and30;#当score在10到30之间时,select*frompeoplewhereNAMELIKE'zoomin%';#当名字开头包含放大时select*frompeoplewhereNAMEglob'magnify*';#同上select*fromwherescorenotin(12,23);#当分数不属于12~233时))).搜索排序select*frompeopleorderbyscoredesc;#score降序排列4))).找到指定数量的数据select*frompeoplelimit3offset2#offset2units然后输出三行数据,其实就是输出最后三行数据5))).查找重复数据并剔除selectdistinct*frompeoplewherescore>10;#当score大于10时剔除重复数据6))).查找数据并分组selectNAME,max(age)frompeoplewherescore>10groupbyage#当score大于10时返回age的最大值7)))。查找数据和分组并过滤分组selectNAME,max(age)frompeoplewherescore>10groupbyagehavingcount(NAME)>1;#Namecountisgreaterthan15).重命名表altertablepeoplerenametoman;#将表名people改为man6)。这里的数据表的连接分为内部连接和外部连接三种,使用好了,可以大大提高我们的工作效率。这里我们再次创建一个表,如下:1))。交叉连接select*frompeoplecrossjoinwoman;2)).内部加入select*frompeopleinnerjoinwoman;3)).外部加入选择*frompeopleouterjoinwoman;注意:Sqlite3只支持左外连接。7).表复制createtablemanasselect*frompeoplewhere1=0;#copytablestructurecreatetablewomanasselect*frompeople;#copytablestructureanddata8).有时候我们并不需要把所有表的数据都存储在临时表中,这时候临时表就非常有必要了。如下:#创建临时表createtemporarytabletemp_table(idintprimarykey,namevarchar(50)uniquenotnull,ageintnotnull);#查看临时表temp.temp_table#删除临时表droptabletemp.temp_table;5.索引操作1).Createindexcreateindexuseronpeople(score);#在people表的score字段上设置索引createuniquenameonpeople(NAME);#给people表的score字段设置唯一索引createindexpaonpeople(score,age)#给people表的score和age字段设置索引2).查看索引SELECT*FROMsqlite_masterWHEREtype='index';这里我们之前只是创建了一个索引,就是“user”,为什么有两个索引,而且top索引好像跟我们没有关系,也好像不是我们自己创建的,其实这是一个隐含的指数。这个隐式索引是我们建表的时候一起创建的。只是为了让查询更快,影响不大。3).使用索引这里涉及到两个关键字,请一起使用,说明索引的来源。选择*frompeopleindexedbyuserwherescore>10;4).删除索引dropindexuser;注意:数据量较小时不要使用索引,以免给系统造成压力。6.查看操作1)。创建视图createviewnameasselectNAMEfrompeople;#创建NAME字段的视图2).使用视图select*fromname;这样就可以直接输出view字段的所有值了。3).删除视图dropviewname;7、触发器触发器是增强多个表的交互,相互调用,调用哪个表满足条件。语法格式如下:createtriggertriggerafter(before)insert(deleteupdate)ontable1begininsertintoTable2(Table2field,Table2field,n)VALUES(Table1value,Table1value,,,,n);结尾;1).创建触发器#为people表创建触发器createtriggercfafterinsertonpeoplebegininsertintowoman(w_ID,NAME,SCORE,date)values(new.ID,'insertforward',100,datetime('now'));end;2).Viewtriggerselect*fromsqlite_masterwheretype='trigger'ANDtbl_name='people';#viewpeople表的触发器3).删除触发器droptriggercf;8.事务有了事务,我们的Sqlite语句就可以更有条理的工作了。一般可以大致分为事务开始、提交、回滚和结束。我们来看一下:begin;#begininsertintopeople('gf',65,datetime('now'));rollback;#Rollback是撤销COMMIT;提交并保存数据end;#End这里的数据没有插入到“人”表,是不是超级简单?2.小结本文主要介绍了Sqlite数据库的数据表、索引、视图、触发器和事务操作等知识,干货满满。皮皮自从学了Sqlite就毅然卸载了Mysql和Mongo,主要是Mysql数据库和Mongo的强大数据还不需要,只要够用就好。
