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