<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          干貨|Sqlite數(shù)據(jù)庫知識必知必會(下篇)

          共 4660字,需瀏覽 10分鐘

           ·

          2021-04-16 02:31

          點擊上方“IT共享之家”,進行關(guān)注

          回復“資料”可獲贈Python學習福利

          問世間,情是何物,直教人生死相許?

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

          前面幾天給大家分享了MySQL數(shù)據(jù)庫知識,沒來得及看的小伙伴可以前往:Mysql查詢語句進階知識集錦一篇文章教會你進行Mysql數(shù)據(jù)庫和數(shù)據(jù)表的基本操作,關(guān)于數(shù)據(jù)庫的安裝可以參考:手把手教你進行Mysql5.x版本的安裝及解決安裝過程中的bug。

          上篇文章主要給大家介紹了Sqlite數(shù)據(jù)庫的安裝、圖形化管理系統(tǒng)、基本數(shù)據(jù)類型、基本關(guān)鍵字和數(shù)據(jù)庫的相關(guān)操作,干貨|Sqlite數(shù)據(jù)庫知識必知必會(上篇)今天皮皮緊接上篇文章,繼續(xù)給大家分享數(shù)據(jù)庫知識,一起來看看吧。


          前言

          前面我們學習了很多數(shù)據(jù)庫,雖然它們功能非常豐富,但是占用空間比較大,使得我們的系統(tǒng)負荷變大,這對于我們新手小白來說不是一個理想的選擇,于是乎,Sqlite閃亮登場,它受人喜愛的真正原因正是因為它足夠小,無需安裝和管理配置,簡單容易上手,支持數(shù)據(jù)庫的大小也有2TB,足夠我們個人開發(fā)愛好者使用了。


          一、數(shù)據(jù)表相關(guān)操作

          1).創(chuàng)建數(shù)據(jù)表

          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快速生成表,如下:

          這樣我們的表就建立成功了。這里小編在軟件中用的是DEMO這個數(shù)據(jù)文件,而在命令窗口中用的是TEST這個數(shù)據(jù)庫文件,因為一個數(shù)據(jù)庫文件不允許在兩個位置打開的緣故。


          2).刪除表

          DROP TABLE people;


          3).顯示表名

          .tables


          4).數(shù)據(jù)表的增刪改查

          1)).增加

          這里我們可以給剛創(chuàng)建的表添加一個數(shù)據(jù),如下:

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

          這里我插入了三行數(shù)據(jù),其中有一行報錯是因為我使用了相同的ID號,而我的數(shù)據(jù)庫的ID號是不允許重復的,故而會報錯,改成其它的就好了,如果你把ID設(shè)為自增的話,就不需要你去寫了,這里我用到了自增,所以大家不必寫Sqlite會自動填充進去的。這里也可以省掉字段名,直接寫值,如下:

          我們還可以給表添加新列,如下;

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

          注:Sqlite3并不支持帶有UNIQUE約束的列

          2)).刪除
          delete from people;#刪除表數(shù)據(jù)delete from people where score<20#刪除people數(shù)據(jù)表score數(shù)值小于20的記錄
          3)).修改

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

          update people set score=100 where  age=46;#當age=46時score設(shè)置為100
          4)).查找

          查找不管是在哪個數(shù)據(jù)庫中方法都是相當多的,因為查詢操作是最常見也是最頻繁的,下面我們就來詳細說說:

          1))).查詢所有的結(jié)果
          select * from student;

          我們可以看到雖然結(jié)果打印出了,但是并不是那么美觀,我們將它的打印格式化一下,如下;

          這下就完美多了。雖然這種方法很不錯,但是如果數(shù)據(jù)列很多的話就無法完全顯示了,這個時候我們就需要設(shè)置列的寬度,如下:

          .width 10 20 15
          2))).查詢指定結(jié)果
          select NAME,score from student; #打印出NAME和score列的結(jié)果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))).查找指定數(shù)量的數(shù)據(jù)
          select * from people  limit 3 offset 2#偏移2個單位然后輸出三行數(shù)據(jù),其實就是輸出后三行數(shù)據(jù)

          5))).查找重復數(shù)據(jù)并消除

          select distinct * from people where score>10;#當score大于10的時候消除重復數(shù)據(jù)
          6))).查找數(shù)據(jù)并進行分組
          select NAME ,max(age) from people where score>10 group by age#返回score大于10的時候age的最大值
          7))).查找數(shù)據(jù)進行分組并過濾分組
          select NAME ,max(age) from people where score>10 group by age having count(NAME)>1;#名稱計數(shù)大于1


          5).表的重命名

          alter table people rename to man;#將表名people改為man


          6).數(shù)據(jù)表的連接

          這里的連接分為內(nèi)外交叉三種連接,使用好了可以極大提高我們的工作效率。這里我們再次創(chuàng)建一張表,如下:

          1)).交叉連接
          select * from people cross join woman;


          2)).內(nèi)連接
          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;#復制表結(jié)構(gòu)create table woman as select * from people;#復制表結(jié)構(gòu)和數(shù)據(jù)


          8).臨時表

          有時候我們不需要存儲所有表的數(shù)據(jù),這個時候臨時表就很有使用的必要了。如下:

          #創(chuàng)建一個臨時表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).創(chuàng)建索引

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


          2).查看索引

          SELECT * FROM sqlite_master WHERE type = 'index';

          這里我們之前僅僅只是創(chuàng)建了一個索引,那就是”user“,為何會有兩個索引了,而且最上面的索引好像跟我們并沒有什么關(guān)系,也不像是自己創(chuàng)建的,其實,這個就是隱式索引,這個隱式索引在我們創(chuàng)建表的時候就連帶著一起創(chuàng)建了的,只是為了讓查詢更加快速而已,影響不大。


          3).使用索引

          這里涉及到兩個關(guān)鍵字請配套使用,表示索引來自于哪里的意思。

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


          4).刪除索引

          drop index user;

          注:數(shù)據(jù)量較小不應(yīng)使用索引,以免給系統(tǒng)增壓。



          6.視圖操作

          1).創(chuàng)建視圖

          create view name as select NAME from people;#創(chuàng)建NAME字段的視圖


          2).使用視圖
          select *from name;

          這樣就可以直接輸出視圖字段的所有值了。


          3).刪除視圖

          drop view name;


          7.觸發(fā)器

          觸發(fā)器就是使得多個表的交互增強,互相調(diào)用,滿足條件就調(diào)用哪個表,語法格式如下:

          create trigger 觸發(fā)器 after(before) insert(delete update)on1begininsert into2(表2字段,表2字段,n) VALUES(表1值, 表1值,,,,n);END;


          1).創(chuàng)建觸發(fā)器

          #給people表創(chuàng)建一個觸發(fā)器create trigger cfafter insert on peoplebegininsert into woman(w_ID,NAME,SCORE,date) values(new.ID,'向前插入',100,datetime('now'));end;


          2).查看觸發(fā)器

          select * from sqlite_master where type = 'trigger'AND tbl_name='people';#查看people表的觸發(fā)器


          3).刪除觸發(fā)器

          drop trigger cf;


          8.事務(wù)

          有了事務(wù)可以讓我們的Sqlite語句工作的更加有條不紊,一般大致分為事務(wù)開始 提交 回滾 結(jié)束,下面來看看:

          begin;#開始insert into people('gf',65,datetime('now'));rollback; #回滾就是撤銷COMMIT;提交保存數(shù)據(jù)end;#結(jié)束

          這里的數(shù)據(jù)沒有插入到“people”表中哦,是不是超級簡單了?


          二、總結(jié)

          這篇文章主要介紹了Sqlite數(shù)據(jù)的數(shù)據(jù)表、索引、視圖、觸發(fā)器和事務(wù)操作知識,干貨滿滿。

          皮皮自從學過Sqlite之后,就果斷卸載了Mysql和Mongo了,主要是目前還用不著Mysql數(shù)據(jù)庫和Mongo那么強大的數(shù)據(jù),夠用就好。

          我是皮皮,如果覺得文章不錯,記得三連噢,大家有問題也可以點擊下方的圖片,加我好友,交個朋友也好呀~

          看完本文有收獲?請轉(zhuǎn)發(fā)分享給更多的人

          IT共享之家

          入群請在微信后臺回復【入群】

          ------------------- End -------------------

          往期精彩文章推薦:

          瀏覽 68
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  狠狠干2022 | 激情麻豆 | 色婷婷六月 | 欧亚毛片| 最近中文字幕免费mv第一季歌词強上 |