1. mybatisplus和mysql的區(qū)別
【todo頭一個(gè)是啥。。】
2. Innodb索引,說(shuō)原理,如何創(chuàng)建索引
【todo放link】見(jiàn)其他文章
3. ACID特性
【todo放link】見(jiàn)其他文章
4. sql注入原理,防止sql注入
【todo】
5. 刪除表中所有的數(shù)據(jù)保留表結(jié)構(gòu)
使用truncate操作【todo其他刪除操作 drop、truncate、 delete】
6. mysql聯(lián)合索引能否命中
【todo】
7. 索引是什么,索引底層
- 索引是對(duì)數(shù)據(jù)庫(kù)表中一列或多列的值進(jìn)行排序的一種結(jié)構(gòu),使用索引可快速訪問(wèn)數(shù)據(jù)庫(kù)表中的特定信息。
在MySQL中,存儲(chǔ)引擎現(xiàn)在索引中查找對(duì)應(yīng)的值,然后根據(jù)匹配的索引記錄找到對(duì)應(yīng)的數(shù)據(jù)行,最后將數(shù)據(jù)結(jié)果集返回給客戶端。- 優(yōu)點(diǎn):
- 在查詢過(guò)程中提高系統(tǒng)的性能
- 通過(guò)創(chuàng)建唯一性索引,可以保證數(shù)據(jù)庫(kù)表中每一行數(shù)據(jù)的唯一性
- 在使用分組和排序子句進(jìn)行數(shù)據(jù)檢索時(shí),可以減少查詢中分組和排序的時(shí)間。
- 缺點(diǎn):
- 創(chuàng)建所有和維護(hù)索引要耗費(fèi)時(shí)間,而且隨著數(shù)據(jù)量的增大而增大。
- 索引需要占用物理空間,如果要建立聚類索引,所需要的空間會(huì)更大。
- 在對(duì)表中的數(shù)據(jù)進(jìn)行增刪改時(shí)需要耗費(fèi)較多的時(shí)間,因?yàn)樗饕惨獎(jiǎng)討B(tài)地維護(hù)。
- 分類:
- 單例索引(主鍵索引、唯一索引、普通索引):
一個(gè)索引只包含一個(gè)列,一個(gè)表可以有多個(gè)單例索引。- 組合索引:
一個(gè)組合索引包含兩個(gè)或兩個(gè)以上的列。2.1 單例索引
普通索引
最常見(jiàn)的索引,沒(méi)有任何限制
唯一索引
與普通索引類似,但是要求所有的列的值都是唯一的,允許有空值
主鍵索引
要求所有的列的值是唯一的,且不允許有空值
2.2 組合索引
如果建立了組合索引,那么它實(shí)際建立了多層單例索引。
在使用查詢的時(shí)候,遵循最左匹配原則。
- 如果不按索引最左列開始查詢則不能使用組合索引。
- 如果查詢的某個(gè)列有范圍查詢,則其右邊的所有列都無(wú)法使用該組合索引。
- 不能跳過(guò)某個(gè)字段進(jìn)行查詢,這樣利用不到組合索引。
【todo, b+樹】
8. 事務(wù)是什么,事務(wù)的特性,具體的事務(wù)例子
【todo】
9. mysql死鎖
【todo】
10. 慢查詢
【todo】
11. mysql連接
【todo】
12. 數(shù)據(jù)庫(kù)中的存儲(chǔ)過(guò)程
【todo】
13. 分布式事務(wù)
【todo】
14. 為什么線上常用可重復(fù)度隔離級(jí)別
【todo】
15. 聚類索引
【todo】
16. 主鍵和外鍵
- 主鍵用來(lái)唯一標(biāo)識(shí)一條記錄,不能有重復(fù),不允許為空,而外鍵可以重復(fù),可以為空。
- 如果公共關(guān)系字在一個(gè)關(guān)系中是主鍵,那么這個(gè)公共關(guān)鍵字被稱為另一個(gè)關(guān)系的外鍵。
- 主鍵用來(lái)保證實(shí)例完整性,外鍵用來(lái)建立與其他表的聯(lián)系,需要保證參照完整性。
- 主鍵在一個(gè)關(guān)系里只能有一個(gè),外鍵可以有多個(gè)。
17. 查詢語(yǔ)句中:先分組還是先排序,為什么?
【todo】
18. order by 和group by 是什么,區(qū)別是什么,
order by 和group by 同時(shí)使用的時(shí)候是什么順序,為什么。
【todo】
19. 范式
- 符合高一級(jí)范式的設(shè)計(jì)必定符合低一級(jí)范式。
- 規(guī)范化:一個(gè)低一級(jí)的關(guān)系模式通過(guò)模式分解可以轉(zhuǎn)化為若干個(gè)高一級(jí)范式的關(guān)系模式的集合,這個(gè)過(guò)程叫做規(guī)范化。
- 候選鍵:若關(guān)系中的某一屬性組的值能唯一標(biāo)識(shí)一個(gè)元組,而其子集不能,則稱該屬性組為候選鍵。若一個(gè)關(guān)系中有多個(gè)候選鍵,則選定其中一個(gè)為主鍵。
- 第一范式1NF:
屬于第一范式關(guān)系的所有屬性都不可再分,即數(shù)據(jù)項(xiàng)不可分。 - 第二范式2NF:
若某關(guān)系R屬于第一范式,且每一個(gè)非主屬性完全依賴于任何一個(gè)候選鍵,則關(guān)系R屬于第二范式 - 第三范式3NF
在第二范式基礎(chǔ)上,任何非主屬性不依賴于其他非主屬性。 - 巴斯-科德范式BCNF
在第三范式基礎(chǔ)上,任何非主屬性不能對(duì)主鍵子集依賴。
20. 左連接、右連接和內(nèi)連接的區(qū)別
【todo】
21. mysql的范圍查找
【todo】
22. innodb和myisam
- InnoDB支持事務(wù),MyISAM不支持。
- InnoDB支持外鍵,而MyISAM不支持。
- InnoDB是聚類索引,使用B+樹作為索引結(jié)構(gòu),數(shù)據(jù)文件是和(主鍵)索引綁在一起的(表數(shù)據(jù)文件本身就是按B+樹組織的一個(gè)索引結(jié)構(gòu)),必須有主鍵,通過(guò)主鍵索引效率很高。但是輔助索引需要兩次查詢,先查詢到主鍵,然后再通過(guò)主鍵查詢到數(shù)據(jù)。因此,主鍵不應(yīng)該過(guò)大,因?yàn)橹麈I太大,其他索引也都會(huì)很大。
MyISAM是非聚類索引,也是使用B+樹作為索引結(jié)構(gòu),索引和數(shù)據(jù)文件是分離的,索引保存的是數(shù)據(jù)文件的指針。主鍵索引和輔助索引是獨(dú)立的。 - InnoDB不保存表的具體行數(shù),執(zhí)行count(*)時(shí)需要進(jìn)行全表掃描,而MyISAM用一個(gè)變量保存了整個(gè)表的行數(shù)
因?yàn)镮nnoDB的事務(wù)特性,在同一時(shí)刻表中的行數(shù)對(duì)于不同的事務(wù)而言是不一樣的,因此count(*)統(tǒng)計(jì)會(huì)計(jì)算對(duì)于當(dāng)前事務(wù)而言可以統(tǒng)計(jì)到的行數(shù)。 - InnoDB支持表、行(默認(rèn))級(jí)鎖,而MyISAM支持表級(jí)鎖。
InnoDB的行級(jí)鎖是實(shí)現(xiàn)在索引上的,而不是鎖在物理行記錄上。 - InnoDB表必須有唯一索引(如主鍵),用戶沒(méi)有指定的話,會(huì)找/生成一個(gè)隱藏列Row_id來(lái)充當(dāng)默認(rèn)主鍵,而MyISAM可以沒(méi)有。
23. 數(shù)據(jù)庫(kù)優(yōu)化
【todo,后悔不好好學(xué)習(xí)】