1、數(shù)據(jù)庫四大范式?
第一范式:屬性不可分割,即每個屬性都是不可分割的原子項。(實體的屬性即表中的列)
第二范式:滿足第一范式;且不存在部分依賴,即非主屬性必須完全依賴于主屬性。(主屬性即主鍵;完全依賴是針對于聯(lián)合主鍵的情況,非主鍵列不能只依賴于主鍵的一部分)
第三范式:滿足第二范式;且不存在傳遞依賴,即非主屬性不能與非主屬性之間有依賴關(guān)系,非主屬性必須直接依賴于主屬性,不能間接依賴主屬性。(A -> B, B ->C, A -> C)
BCNF(BC范式) 它構(gòu)建在第三范式的基礎(chǔ)上,如果關(guān)系模型R是第一范式,且每個屬性都不傳遞依賴于R的候選鍵 (其他非主鍵字段),那么稱R為BCNF的模式
。
- 1NF: 字段是最小的的單元不可再分
- 2NF:滿足1NF,表中的字段必須完全依賴于全部主鍵而非部分主鍵 (一般我們都會做到)
- 3NF:滿足2NF,非主鍵外的所有字段必須互不依賴
4NF:滿足3NF,消除表中的多值依賴
PS:
滿足BCNF的關(guān)系模式,肯定也滿足3NF;同理,滿足3NF的關(guān)系模式,肯定也滿足2NF
2、SQL生命周期?
- 應(yīng)用服務(wù)器與數(shù)據(jù)庫服務(wù)器建立一個連接
- 數(shù)據(jù)庫進程拿到SQL請求
- 解析并生成執(zhí)行計劃執(zhí)行
- 讀取數(shù)據(jù)到內(nèi)存并進行邏輯處理
- 通過步驟一的連接,發(fā)送結(jié)果到客戶端
- 關(guān)閉連接,釋放資源。
3、SQL六種語言?
3.1.數(shù)據(jù)庫定義語言 DDL (Data Definition Language)
面向的對象: 數(shù)據(jù)庫 和 表(邏輯結(jié)構(gòu)、表結(jié)構(gòu)、視圖、索引)
關(guān)鍵字: create、alter、drop、truncate
(刪除當前表再新建一個相同的表)
3.2. 數(shù)據(jù)庫查詢語言 DQL (Data Query Language)
面向的對象: 表、字段
語句順序:select (distinct)…from…join…on…where…group by…h(huán)aving…order by…limit
執(zhí)行順序:from…on…join…where…group by…h(huán)aving…select(distinct)…order by…limit
where和having的區(qū)別:
1.WHERE子句用來篩選 FROM 子句中指定的操作所產(chǎn)生的行,在執(zhí)行分組之前進行應(yīng)用;GROUP BY子句用來分組 WHERE 子句的輸出;HAVING子句用來從分組的結(jié)果中篩選行,在執(zhí)行分組之后進行應(yīng)用。
2.where子句中的條件表達式having都可以跟,而having子句中的有些表達式where不可以跟;having子句可以用集合函數(shù)(sum、count、avg、max和min),而where子句不可以。
3.where可以用于select、update、delete和insert語句中;having只能用于select語句中
。
3.3. 數(shù)據(jù)庫操縱語言 DML (Data Manipulation Language)
面向的對象: 記錄(行)
關(guān)鍵字: insert、update、delete
注意:
開發(fā)中很少使用delete,刪除有物理刪除
和邏輯刪除
,其中邏輯刪除可以通過給表添加一個字段(isDel),若值為1,代表刪除;若值為0,代表沒有刪除。
此時,對數(shù)據(jù)的刪除操作就變成了update操作了。
truncate和delete的區(qū)別:truncate
是刪除表,再重新創(chuàng)建這個表。屬于DDL
,delete
是一條一條刪除表中的數(shù)據(jù),屬于DML。
3.4. 數(shù)據(jù)庫控制功能 DCL (Data Control Language)
面向的對象: 用戶、權(quán)限、事務(wù)。
關(guān)鍵字: grant,revoke
3.5、事務(wù)處理語言 DPL
事務(wù)處理語句能確保被DML語句影響的表的所有行及時得以更新。TPL語句包括BEGIN TRANSACTION、COMMIT和ROLLBACK。
3.6、指針控制語言 CCL
它的語句,像DECLARE CURSOR、FETCH INTO和UPDATE WHERE CURRENT用于對一個或多個表單獨行的操作。
4、索引?
4.1什么是索引?
- 官方介紹索引是幫助MySQL高效獲取數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)。更通俗的說,數(shù)據(jù)庫索引好比是一本書前面的目錄,能加快數(shù)據(jù)庫的查詢速度。
- 一般來說索引本身也很大,不可能全部存儲在內(nèi)存中,因此索引往往是存儲在磁盤上的文件中的(可能存儲在單獨的索引文件中,也可能和數(shù)據(jù)一起存儲在數(shù)據(jù)文件中)。
- 我們通常所說的索引,包括
聚集索引、覆蓋索引、組合索引、前綴索引、唯一索引
等,沒有特別說明,默認都是使用B+樹結(jié)構(gòu)
組織(多路搜索樹,并不一定是二叉
的)的索引。**
4.2索引類型?
-
主鍵索引
索引列中的值必須是唯一的,`不允許有空值`。
-
普通索引
MySQL中基本索引類型,沒有什么限制,`允許`在定義索引的列中`插入重復(fù)值和空值。`
-
全文索引
只能在文本類型CHAR,VARCHAR, TEXT 類型字段上創(chuàng)建全文索引。字段長度比較大時,如果創(chuàng)建普通索引, 在進行l(wèi)ike模糊查詢時效率比較低,這時可以創(chuàng)建全文索引。 MyISAM和InnoDB中都可以使用全文索引。
-
唯一索引
索引列中的值必須是`唯一`的,但是`允許為空值`。
-
空間索引
MySQL在5.7之后的版本支持了空間索引,而且支持`OpenGIS`幾何數(shù)據(jù)模型。 MySQL在空間索引這方面遵循OpenGIS幾何數(shù)據(jù)模型規(guī)則。
-
前綴索引
在文本類型如CHAR,VARCHAR,TEXT類列上創(chuàng)建索引時,可以指定索引列的長度,但是數(shù)值類型不能指定。
-
其他(按照索引列數(shù)量分類)
1. 單列索引
2. 組合索引: 組合索引的使用,需要遵循最左前綴匹配原則(最左匹配原則) 。一般情況下在條件允許的情況下使用組合索引替代多個單列索引使用。
4.3索引的優(yōu)勢和劣勢?
4.3.1優(yōu)勢
- 可以提高數(shù)據(jù)檢索的效率,降低數(shù)據(jù)庫的IO成本,類似于書的目錄。
- 通過索引列對數(shù)據(jù)進行排序,降低數(shù)據(jù)排序的成本,降低了CPU的消耗。
-
被索引的列會自動進行排序
,包括【單列索引】和【組合索引】,只是組合索引的排序要復(fù)雜一些。 -
如果按照索引列的順序進行排序,對應(yīng)order by語句來說,效率就會提高很多
。
-
4.3.2劣勢
- 索引會占據(jù)磁盤空間
-
索引雖然會提高查詢效率,但是會降低更新表的效率
- 比如每次對表進行增刪改操作,MySQL不僅要保存數(shù)據(jù),還有保存或者更新對應(yīng)的索引文件。
5、最左匹配原則?
過濾條件要使用索引必須按照索引建立時的順序,依次滿足,一旦跳過某個字段,索引后面的字段都無法使用。
(>、<、between、like)都會停止匹配。
ps:創(chuàng)建的索引列都存在,Mysql的優(yōu)化器
會自動給你排序。
6、哪些情況不要創(chuàng)建索引?
-
表記錄太少
300w數(shù)據(jù)時MySQL性能就開始下降了,這時就可以開始優(yōu)化了。
-
經(jīng)常增刪改的表
提高了查詢速度,同時卻會降低更新表速度,如對標進行INSRERT、UPDATE、DELETE 因為更新表時,MySQL不僅要保存數(shù)據(jù)還要保存一下索引文件
-
where條件里用不到的字段不創(chuàng)建索引
7、為什么索引后查詢效率高呢?
這個就涉及到索引
和數(shù)據(jù)結(jié)構(gòu)
了,類比書籍的目錄頁,索引通過B+樹
的結(jié)構(gòu)存放數(shù)據(jù),橫向數(shù)據(jù)多,縱向的高低越低,和磁盤
交互就越少,查詢得速度就越快。
8、MySQL有關(guān)權(quán)限表都有哪些?
- user:用戶賬號、全局權(quán)限
- db:庫級別權(quán)限
- host:廢棄
- tables_priv:表級別權(quán)限
- colums_priv:列級別權(quán)限
- procs_priv:存儲過程和存儲函數(shù)相關(guān)的權(quán)限
- proxies_priv:代理用戶權(quán)限
9、事務(wù)的ACID?
-
原子性(Atomicity):
事務(wù)是數(shù)據(jù)庫的邏輯工作單位,事務(wù)中包含的各操作要么都做,要么都不做 -
一致性(Consistency):
事務(wù)執(zhí)行的結(jié)果必須是使數(shù)據(jù)庫從一個一致性狀態(tài)變到另一個一致性狀態(tài)。
因此當數(shù)據(jù)庫只包含成功事務(wù)提交的結(jié)果時,就說數(shù)據(jù)庫處于一致性狀態(tài)。如果數(shù)據(jù)庫系統(tǒng)運行中發(fā)生故障,有些事務(wù)尚未完成就被迫中斷,這些未完成事務(wù)對數(shù)據(jù)庫所做的修改有一部分已寫入物理數(shù)據(jù)庫,這時數(shù)據(jù)庫就處于一種不正確的狀態(tài),或者說是不一致的狀態(tài)。
-
隔離性(Isolation):
一個事務(wù)的執(zhí)行不能對其它事務(wù)形成干擾。 即一個事務(wù)內(nèi)部的操作及使用的數(shù)據(jù)對其它并發(fā)事務(wù)是隔離的,并發(fā)執(zhí)行的各個事務(wù)之間不能互相干擾。 -
持續(xù)性(Durability):
也稱永久性,指一個事務(wù)一旦提交,它對數(shù)據(jù)庫中的數(shù)據(jù)的改變就應(yīng)該是永久性的。 接下來的其它操作或故障不應(yīng)該對其執(zhí)行結(jié)果有任何影響。文章來源:http://www.zghlxwxcb.cn/news/detail-858560.html
10、索引的數(shù)據(jù)結(jié)構(gòu)?
- Hash表
- 二叉查找樹
- 平衡二叉樹
- B樹:改造二叉樹
- B+樹:改造B樹
你知道的越多,你不知道的就越多
文章來源地址http://www.zghlxwxcb.cn/news/detail-858560.html
到了這里,關(guān)于MySQL面試題入門:四大范式、SQL生命周期、SQL六大語言、索引、最左匹配原則....的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!