【模組三】資料庫篇--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優化