更新時間:2023-01-28 15:51:37 來源:動力節(jié)點(diǎn) 瀏覽1420次
互聯(lián)網(wǎng)產(chǎn)品必然是需要有架構(gòu)的,架構(gòu)包含接入層、儲蓄層、邏輯處理等等,其中存儲層承載著數(shù)據(jù)落地和持久化的任務(wù),同時給邏輯處理層提供數(shù)據(jù)查詢功能支持。而一提到儲蓄層必然就要說數(shù)據(jù)庫了,對于數(shù)據(jù)庫的掌握也是軟件工程師面試時必考的知識點(diǎn)。
1.簡單描述mysql中, 索引、主鍵、唯一索引、聯(lián)合索引的區(qū)別,對數(shù)據(jù)庫的性能有什么影響(從讀寫兩方面)
2. sql注入漏洞產(chǎn)生的原因,如何防止?
程序開發(fā)過程中沒有規(guī)范書寫sql語句,沒有對特殊字符進(jìn)行過濾都會導(dǎo)致sql注入的風(fēng)險
使用orm可以有效的防止sql注入,sql語句書寫盡量不要省略雙引號和單引號,過濾掉關(guān)鍵詞select update delete insert *等
3. 對于關(guān)系型數(shù)據(jù)庫而言,索引是相當(dāng)重要的概念,請回答索引相關(guān)的幾個問題
索引的目的是什么?
索引對數(shù)據(jù)庫系統(tǒng)的負(fù)面影響是什么?
創(chuàng)建索引和維護(hù)索引也需要耗費(fèi)時間,這個時間隨著數(shù)據(jù)量的增加而增大,索引需要占用物理空間,
不光是表需要占據(jù)數(shù)據(jù)空間,每個索引也需要占用物理空間,對表進(jìn)行增、刪、改的時候索引也需要動態(tài)維護(hù),
這就降低了數(shù)據(jù)的維護(hù)速
為數(shù)據(jù)表建立索引的原則有哪些?
在最頻繁使用的,用以縮小查詢范圍的字段上建立索引
在頻繁使用的需要排序的字段上建立索引
什么情況下不宜建立索引?
對于查詢中很少設(shè)計(jì)的列以及重復(fù)值很多的列,不宜設(shè)計(jì)索引
對于一些特護(hù)的類型不宜建立索引,比如text類型
為什么重復(fù)值很多的列不宜設(shè)計(jì)索引?
因?yàn)槿绻貜?fù)值特別多,比如性別列只有男和女,當(dāng)我們?yōu)樾詣e列建立了索引的話,
輔助索引每次查詢男或女都會查詢出一半左右的主鍵值,然后再拿著這一半的主鍵值去走聚簇索引(主索引),反而比全表掃描性能還低,
這種情況下就不能建立索引
4. 解釋mysql外連接、內(nèi)連接、與自連接的區(qū)別?
交叉連接:交叉連接又叫笛卡爾積表,它是指不使用任何條件,將一個表中的所有記錄與另外一張表中的所有記錄一一匹配
內(nèi)連接:根據(jù)條件,只篩選兩個表中都有的記錄
外連接:分為左外連接、右外連接、全外連接
左外連接:左表為主表,左表中的記錄全部顯示,右表中所有匹配的記錄顯示,不匹配的記錄顯示為NULL
右外連接:與左相反
全外連接:mysql目前還不支持全外連接,但是可以使用union合并左外+右外=全外
5. mysql中的事務(wù)回滾機(jī)制概述
事務(wù)是用戶定義的一個數(shù)據(jù)庫操作序列,這些操作要么都做完,要么都不做,
事務(wù)回滾是將一個事務(wù)中對數(shù)據(jù)庫的更新操作撤銷,事務(wù)回滾需要通過InnoDB中的回滾日志undo log來實(shí)現(xiàn)
6. sql語言包括哪幾部分? 每部分都有哪些操作關(guān)鍵字?
數(shù)據(jù)定義語言DDL:create/alter/drop table, create/drop index
數(shù)據(jù)操作語言DML: select insert update delete
數(shù)據(jù)控制語言DCL: grant revoke
數(shù)據(jù)查詢語言DQL: select
7. 完整性約束包括哪些?
數(shù)據(jù)的完整性是指數(shù)據(jù)的精確性和可靠性
與表有關(guān)的約束,包括列約束:not null非空約束,primary key主鍵約束,foreign key外鍵約束, unique唯一約束等
8. 什么是鎖?
加鎖是實(shí)現(xiàn)數(shù)據(jù)庫并發(fā)控制的非常重要的技術(shù),分為讀鎖和寫鎖,當(dāng)一個事務(wù)獲取了讀鎖,
其它事務(wù)就只能獲取讀鎖,不能獲取寫鎖,
當(dāng)一個事務(wù)優(yōu)先獲取了寫鎖,其它事務(wù)既不能獲取讀鎖也不能獲取寫鎖
但是mysql中又分為當(dāng)前讀和快照度,上面說的是當(dāng)前讀的情形,快照讀的話不影響其它事務(wù)獲取寫鎖
基本鎖類型包括行級鎖和表級所,InnoDB是行級鎖,MyISAM是表級鎖
9. 什么叫視圖?游標(biāo)是什么?
視圖是一種虛擬的表,具有和物理表相同的功能,可以對視圖進(jìn)行增刪改查操作,視圖由一個或多個表的行列組成的集合
對視圖表的修改不影響基本表,它使我們查詢數(shù)據(jù)更容易
游標(biāo):對于查詢出來的結(jié)果集作為一個單元來有效的處理,游標(biāo)可以定在該單元中的特定行,
一般不使用游標(biāo),但是需要逐條處理的時候就需要使用游標(biāo)
10. 如何通俗的理解三個范式?
第一范式是對屬性的原子性約束,要求屬性具有原子性,不可再分解;
第二范式是對記錄的唯一性約束,要求記錄有唯一標(biāo)識,即實(shí)體的唯一性
第三范式是對字段冗余性約束,即任何字段不能由其它字段派生出來,它要求字段沒有冗余
范式優(yōu)點(diǎn):減少數(shù)據(jù)冗余,使得更新快,體積小
缺點(diǎn):查詢需要多表關(guān)聯(lián)查詢,效率低
以上就是“最新的經(jīng)典mysql面試題及答案”,你能回答上來嗎?如果想要了解更多的Java面試題相關(guān)內(nèi)容,可以關(guān)注動力節(jié)點(diǎn)Java官網(wǎng)。
相關(guān)閱讀
初級 202925
初級 203221
初級 202629
初級 203743