1. 程式人生 > >【模組三】資料庫篇--MySQL面試題☞參考答案

【模組三】資料庫篇--MySQL面試題☞參考答案

【一】初級

 

【二】中級

  • 執行過程

【1】客戶端向MySQL伺服器傳送一條查詢請求
【2】伺服器首先檢查查詢快取,如果命中快取,則立刻返回儲存在快取中的結果。否則進入下一階段
【3】伺服器進行SQL解析、預處理、再由優化器生成對應的執行計劃
【4】MySQL根據執行計劃,呼叫儲存引擎的API來執行查詢
【5】將結果返回給客戶端,同時快取查詢結果

  • 多種Join

交集:
select * from A inner join B on A.key = B.key
並集:
select * from A full outer join B on A.key = B.key
差集:
select * from A left outer join B on A.key = B.key where B.key IS NULL
select * from A right outer join B on A.key = B.key where A.key IS NULL
以A表為主表,A表資料全部取到
select * from A left outer join B on A.key = B.key
以B表為主表,B表資料全部取到
select * from A right outer join B on A.key = B.key
取A,B全集,並去掉A,B的交集
select * from A full outer join B on A.key = B.key where A.key IS NULL or B.key IS NULL

  • 資料庫設計

        表結構設計:遵循三正規化 NF(Normal Form)        

(1)簡單歸納:
  第一正規化(1NF):欄位不可分
  第二正規化(2NF):有主鍵,非主鍵欄位依賴主鍵
  第三正規化(3NF):非主鍵欄位不能相互依賴        

(2)本質解釋:
  1NF:原子性。 欄位不可再分,否則就不是關係資料庫
  2NF:唯一性 。一個表只說明一個事物
  3NF:每列都與主鍵有直接關係,不存在傳遞依賴

        欄位設計

    1.欄位型別選擇:儘量小
        --變長欄位使用varchar,定長使用char
        --冗餘欄位,合理參考正規化,以空間換時間
        --int型別詳解:https://www.jb51.net/article/93777.htm

Q:int(3)中數字3的含義是什麼?

答:這裡的3代表的並不是儲存在資料庫中的具體的長度,以前總是會誤以為int(3)只能儲存3個長度的數字.不論是int(3)還是int(11),它在資料庫裡面儲存的都是4個位元組的長度。加上zerofill後,,才能看出3代表的效果,比如 int(3) zerofill,當你插入到資料庫裡的是10,則實際插入為010,插入的數字超過3位,定義的3不再起作用。

Q:不同int型後的預設位數M分別是多少?

答: TINYINT[(M)] [UNSIGNED] [ZEROFILL]  M預設為4

        SMALLINT[(M)] [UNSIGNED] [ZEROFILL] M預設為6

        MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL] M預設為9

        INT[(M)] [UNSIGNED] [ZEROFILL]   M預設為11

        BIGINT[(M)] [UNSIGNED] [ZEROFILL] M預設為20
    2.命名規則
        -多個單詞以 "_" 連線
        -重要資料表模型加上create_user,create_time,last_modify_user,last_modify_time欄位
    3.主鍵

        -每張表必須建立一個自增id作為主鍵

    4.索引

        -where限定條件後查詢欄位加索引

  •     SQL優化