1考榨、數(shù)據(jù)庫(kù)基本知識(shí)介紹
功能:存儲(chǔ)大量的數(shù)據(jù)刻蟹,查詢數(shù)據(jù)
數(shù)據(jù)庫(kù)排名:https://db-engines.com/en/ranking/relational+dbms
設(shè)計(jì)模型:E-R設(shè)計(jì)模型髓考,關(guān)系型數(shù)據(jù)庫(kù)使用的都是該模型,不同的是核心代碼的存儲(chǔ)方式和讀取方式。E指的是實(shí)體腻豌,R指的是關(guān)系
ER模型中的實(shí)體對(duì)應(yīng)數(shù)據(jù)庫(kù)中的一張表,而關(guān)系指的是兩個(gè)實(shí)體之間的關(guān)系:一對(duì)一嘱能、一對(duì)多吝梅、多對(duì)多。
三范式:簡(jiǎn)單來(lái)說(shuō)就是設(shè)計(jì)數(shù)據(jù)庫(kù)時(shí)候的一些規(guī)范
第一范式1NF:列不可拆分
第二范式2NF:唯一標(biāo)識(shí)
第三范式3NF:引用主鍵
數(shù)據(jù)完整性指的是數(shù)據(jù)的正確性惹骂,常用的是數(shù)據(jù)類型檢查和其他約束
數(shù)據(jù)類型
int 指的是整數(shù)
decimal(m,n)? #m指的是一共m位苏携,小數(shù)n位
test 適用于文本,字符串比較多的場(chǎng)景
char(m)? 固定長(zhǎng)度对粪,用于存儲(chǔ)手機(jī)號(hào)碼等固定長(zhǎng)度的數(shù)據(jù)右冻,指定m個(gè)字符装蓬,若不夠不全
varchar(m)? 可變長(zhǎng)度,用于存儲(chǔ)長(zhǎng)度不固定的數(shù)據(jù)
datetime? #指的是日期和時(shí)間
bit(m)? #8位? ? ?使用場(chǎng)景:存儲(chǔ)性別【兩種狀態(tài)】纱扭,內(nèi)存開(kāi)銷小牍帚。如0表示女,1表示男
【注】創(chuàng)建數(shù)據(jù)庫(kù)設(shè)置編碼格式
其他約束乳蛾,如下
主鍵決定物理存儲(chǔ)方式暗赶,唯一標(biāo)識(shí)。通過(guò)主鍵能快速找到一張表中的數(shù)據(jù)
唯一可以有很多肃叶,但是主鍵只有一個(gè)蹂随。
2、mysql圖形可視化界面操作
以mysql可視化工具Workbench為例被环,講這個(gè)的目的是要求在圖形化界面可以做一些基本的操作
當(dāng)mysql安裝成功后糙及,且mysql服務(wù)啟動(dòng)后,打開(kāi)可視化界面就連接數(shù)據(jù)庫(kù)
常用操作
創(chuàng)建數(shù)據(jù)庫(kù):
編碼選擇utf-8【CREATE SCHEMA `test02` DEFAULT CHARACTER SET utf8 ;】
創(chuàng)建表
選中tables筛欢,右鍵創(chuàng)建表
設(shè)計(jì)表:設(shè)置表的字段
給表中添加數(shù)據(jù)浸锨、修改數(shù)據(jù)
3、windows下打開(kāi)命令行操作mysql
首先要知道m(xù)ysql安裝路徑
然后shift+右鍵版姑,在此處打開(kāi)命令行
也可以在windows開(kāi)始快速打開(kāi)
常用操作
查詢數(shù)據(jù)庫(kù)版本:
查看當(dāng)前時(shí)間
創(chuàng)建數(shù)據(jù)庫(kù)
刪除數(shù)據(jù)庫(kù)
切換數(shù)據(jù)庫(kù)
查詢當(dāng)前所有的數(shù)據(jù)庫(kù)
查看當(dāng)前所有表
查看當(dāng)前數(shù)據(jù)庫(kù)
創(chuàng)建表
查詢表的結(jié)構(gòu)
修改表
add是增加柱搜,change是修改,drop是刪除
更改表名和查看表的創(chuàng)建語(yǔ)句
簡(jiǎn)單查詢表數(shù)據(jù)
插入一條數(shù)據(jù)
全列插入剥险,操作如下
缺省插入聪蘸,操作如下
其他
數(shù)據(jù)修改、更新操作
操作如下
刪除一條數(shù)據(jù)
【注】這里講一下邏輯刪除和物理刪除表制,物理刪除就是用delete語(yǔ)句刪除一行健爬,邏輯刪除就是設(shè)計(jì)表結(jié)構(gòu)的時(shí)候增加一個(gè)刪除標(biāo)記位isdelete,用戶刪除的時(shí)候使用update語(yǔ)句設(shè)置標(biāo)志位是0么介。查詢所有表數(shù)據(jù)的時(shí)候使用where條件語(yǔ)句
數(shù)據(jù)備份與恢復(fù)
linux下數(shù)據(jù)庫(kù)備份
數(shù)據(jù)恢復(fù)
首先要?jiǎng)?chuàng)建數(shù)據(jù)庫(kù)娜遵,然后執(zhí)行恢復(fù)操作
4、數(shù)據(jù)庫(kù)查詢語(yǔ)句詳解
查詢的基本用法
操作如下:
消除重復(fù)行壤短,distinct【比較的時(shí)候是看一行】
where后面增加條件
where后面的條件會(huì)對(duì)表中的每一行進(jìn)行過(guò)濾设拟,最后返回結(jié)果集
邏輯運(yùn)算符【與、或久脯、非】
模糊查詢
操作如下
范圍查詢
操作如下
【注】:有多個(gè)and的時(shí)候纳胧,從左到右進(jìn)行匹配,邏輯運(yùn)算符and優(yōu)先級(jí)低帘撰,所以先匹配between
空判斷
【注】null表示空跑慕,不占用內(nèi)存。判斷的時(shí)候不能用=判斷
where后面條件運(yùn)算符的優(yōu)先級(jí)骡和,這些運(yùn)算符包括條件運(yùn)算符相赁、邏輯運(yùn)算符相寇、范圍運(yùn)算符慰于、模糊運(yùn)算符钮科、判空運(yùn)算符
聚合
聚合的核心是為了統(tǒng)計(jì),對(duì)多行數(shù)據(jù)進(jìn)行統(tǒng)計(jì)婆赠,統(tǒng)計(jì)之后看不到原始的數(shù)據(jù)绵脯,得到的是一個(gè)聚合后的結(jié)果
常用的聚合函數(shù)如下
【注】求最大值max、最小值min休里、平均數(shù)avg蛆挫、求和sum要求計(jì)算的列一般是數(shù)字類型。
聚合函數(shù)是無(wú)法得到原始數(shù)據(jù)妙黍,但是我們可以通過(guò)其他手段獲取悴侵,如通過(guò)子查詢
分組
分組是為了聚合,怎么理解呢?分組將相同屬性的分到不同組拭嫁,然后對(duì)此做聚合操作可免,統(tǒng)計(jì)出不同組內(nèi)的數(shù)據(jù)
執(zhí)行順序:首先f(wàn)rom語(yǔ)句從后面的表名獲取原始數(shù)據(jù)集
然后執(zhí)行where后面的條件篩選做粤,返回經(jīng)過(guò)過(guò)濾處理的結(jié)果集
再進(jìn)行分組group by浇借,返回經(jīng)過(guò)分組處理的數(shù)據(jù)
在分組處理having,對(duì)分組后的結(jié)果進(jìn)行處理
最后顯示結(jié)果
排序
分頁(yè)
實(shí)例如下
結(jié)合排序order by怕品,先對(duì)原始數(shù)據(jù)進(jìn)行排序妇垢,然后再按照索引取數(shù)據(jù)
實(shí)際應(yīng)用
完整的select語(yǔ)句
5、高級(jí)內(nèi)容
主要內(nèi)容:關(guān)系肉康、連接查詢闯估、自關(guān)聯(lián)、視圖吼和、索引涨薪、事物
詳解關(guān)系
首先關(guān)系在上文中說(shuō)了是指的實(shí)體之間的關(guān)系,在項(xiàng)目中我們要設(shè)計(jì)表纹安,要明確表之間的關(guān)系尤辱。這里就需要提到上文說(shuō)到的E-R模型。比如下面的三張表
首先三個(gè)表(實(shí)體)之間的關(guān)系厢岂,成績(jī)表中用到學(xué)生和科目信息光督,學(xué)生和科目這兩列根據(jù)第三范式引用主鍵要求是引用的另外兩個(gè)表中的主鍵,而不是自己維護(hù)塔粒,這兩個(gè)列就是關(guān)系列【關(guān)系字段】结借。這兩個(gè)信息分別在學(xué)生表和科目表中維護(hù)。
關(guān)系分析
f學(xué)生表和成績(jī)表是關(guān)系是一對(duì)多
科目表和成績(jī)表是關(guān)系是一對(duì)多
【注】怎么看關(guān)系是不是一對(duì)多卒茬,分析A表中的一行對(duì)應(yīng)B表中多行船老。
存儲(chǔ)關(guān)系
若兩個(gè)表是一對(duì)一的關(guān)系咖熟,那么關(guān)系字段在兩個(gè)表都可以
若兩個(gè)表是一對(duì)多的關(guān)系,那么關(guān)系字段在多對(duì)應(yīng)的表中
若兩個(gè)表是對(duì)多對(duì)多的關(guān)系柳畔,需要另外建立一張表存儲(chǔ)關(guān)系字段
關(guān)系設(shè)計(jì)的注意不要設(shè)置成閉合馍管,這樣會(huì)導(dǎo)致存儲(chǔ)冗余
如上圖需要把關(guān)系打開(kāi),實(shí)際使用中實(shí)際考慮
關(guān)系字段
外鍵用來(lái)保證關(guān)系字段的正確和有效性
插入數(shù)據(jù)會(huì)檢查
外鍵的級(jí)聯(lián)操作
【注】設(shè)計(jì)過(guò)程中是先確定ER模型薪韩,然后設(shè)計(jì)表結(jié)構(gòu)確定關(guān)系列确沸,最后創(chuàng)建表添加外鍵
連接查詢join
當(dāng)對(duì)多個(gè)有關(guān)系的表進(jìn)行查詢的,既想要的結(jié)果來(lái)自于多個(gè)表考慮連接查詢
多表查詢
內(nèi)連接要求多個(gè)表的數(shù)據(jù)都出現(xiàn)才會(huì)顯示結(jié)果俘陷,這個(gè)時(shí)候是不分表的順序的
左連接罗捎,以左表中數(shù)據(jù)為準(zhǔn)
右連接,以右表為準(zhǔn)
確定實(shí)體間是否有關(guān)系
確定是幾對(duì)幾的關(guān)系
確定在哪個(gè)實(shí)體之間建立關(guān)系字段
連接查詢:首先連接有三種情況拉盾,內(nèi)連接桨菜、左連接、右連接捉偏,詳細(xì)上文已經(jīng)介紹過(guò)了倒得。返回的結(jié)果是多個(gè)表聯(lián)合查詢到的數(shù)據(jù)。但是實(shí)際情況下告私,我們不需要所有數(shù)據(jù)屎暇。所以一般會(huì)在這之上添加過(guò)濾條件,就是SQL查詢講到的內(nèi)容驻粟。進(jìn)行分組根悼、聚合、分頁(yè)等高級(jí)操作
練習(xí)
自查詢
這種場(chǎng)景下表1和2數(shù)據(jù)量很小蜀撑,但是建立一張表的開(kāi)銷是很大的挤巡,這個(gè)時(shí)候會(huì)造成性能浪費(fèi)
自關(guān)聯(lián)
自連接查詢
首先自連接是指的本表和本表進(jìn)行連接join。在物理上他們是一張表酷麦,但是邏輯上我們可以認(rèn)為它們是兩張表矿卑。如下,為了美觀和正確顯示沃饶,查詢的時(shí)候用了別名
視圖:怎么理解視圖呢母廷,簡(jiǎn)單來(lái)說(shuō)可以說(shuō)是生成一個(gè)新的表結(jié)構(gòu),這個(gè)表存放select語(yǔ)句生成的結(jié)果集糊肤。
對(duì)select語(yǔ)句進(jìn)行封裝
修改視圖alter
事物簡(jiǎn)單介紹
事物開(kāi)始與提交
事物開(kāi)始與回滾begin和rollback
beigin后面的修改操作【增加琴昆、刪除、更新】會(huì)修改內(nèi)存層面的數(shù)據(jù)馆揉,但是物理上不變
索引的簡(jiǎn)單介紹
選擇的數(shù)據(jù)類型
索引操作
性能檢測(cè)set? profiling=1
創(chuàng)建索引再執(zhí)行查找動(dòng)作
性能檢測(cè)工具查出來(lái)時(shí)間明顯減少
【注】主鍵和外鍵默認(rèn)就是索引
缺點(diǎn)