資料庫面試題彙總
目錄
- 資料庫
- 資料庫的定義
- SQL
- SQL語言包括
- 資料定義
- 資料操縱
- 資料控制
- 完整性約束
- SQL約束
- 儲存過程
- 儲存過程的定義
- 儲存過程的優點
- 儲存過程的缺點
- 索引
- 適合建索引
- 索引的定義
- MySQL的基本索引型別
- 索引的優缺點
- 事務
- 事務的定義
- 事務的性質
- drop、delete與truncate
- 相同點
- 不同點
- 場景使用
- 超健、候選鍵、主鍵、外來鍵
- 超健
- 候選鍵
- 主鍵
- 外來鍵
- 檢視
- 檢視的定義
- 檢視的使用場景
- 優點
- 缺點
- 正規化
- 第一正規化
- 第二正規化
- 第三正規化
- 樂觀鎖和悲觀鎖
- 作用
- 悲觀鎖
- 樂觀鎖
- 表的連線方式
- 型別
- 內連線
- 外連線
- 交叉連線
- 優化資料庫查詢語句速度
資料庫
資料庫的定義
資料庫指的是以一定方式儲存在一起、能為多個使用者共享、具有儘可能小的冗餘度的特點、是與應用程式彼此獨立的資料集合。
SQL
SQL語言包括
資料定義、資料操縱、資料控制
資料定義
Create Table,Alter Table,Drop Table, Craete/Drop Index等
資料操縱
Select ,insert,update,delete
資料控制
grant,revoke
完整性約束
實體完整性、參照完整性、使用者定義完整性
SQL約束
- NOT NULL: 用於控制欄位的內容一定不能為空(NULL)。
- UNIQUE: 控制元件欄位內容不能重複,一個表允許有多個 Unique 約束。
- PRIMARY KEY: 也是用於控制元件欄位內容不能重複,但它在一個表只允許出現一個。
- FOREIGN KEY: 用於預防破壞表之間連線的動作,也能防止非法資料插入外來鍵列,因為它必須是它指向的那個表中的值之一。
- CHECK: 用於控制欄位的值範圍。
儲存過程
儲存過程的定義
儲存過程是一些預編譯的SQL語句,封裝了我們的程式碼
儲存過程的優點
- 儲存過程是一個預編譯的程式碼塊,執行效率比較高
- 一個儲存過程替代大量T_SQL語句 ,可以降低網路通訊量,提高通訊速率
- 可以一定程度上確保資料安全
儲存過程的缺點
- 每個資料庫的儲存過程語法幾乎都不一樣,十分難以維護
- 業務邏輯放在資料庫上,難以迭代
索引
適合建索引
唯一、不為空、經常被查詢的欄位
索引的定義
索引是對資料庫表中一或多個列的值進行排序的結構,是幫助MySQL高效獲取資料的資料結構
MySQL的基本索引型別
普通索引、唯一索引、主鍵索引、全文索引
索引的優缺點
- 索引加快資料庫的檢索速度
- 唯一索引可以確保每一行資料的唯一性
- 通過使用索引,可以在查詢的過程中使用優化隱藏器,提高系統的效能
- 索引降低了插入、刪除、修改等維護任務的速度
- 索引需要佔物理和資料空間
事務
事務的定義
併發控制的基本單位。是一個操作序列,這些操作要麼都執行,要麼都不執行,它是一個不可分割的工作單位。事務是資料庫維護資料一致性的單位,在每個事務結束時,都能保持資料一致性。
事務的性質
原子性、一致性、隔離性、永續性
drop、delete與truncate
相同點
都表示刪除
不同點
- delete和truncate只刪除表的資料不刪除表的結構
- 速度,一般來說: drop>truncate>delete
- delete語句是dml,這個操作會放到rollback segement中,事務提交之後才生效,如果有相應的trigger,執行的時候將被觸發。truncate,drop是ddl, 操作立即生效,原資料不放到rollback segment中,不能回滾. 操作不觸發trigger.
場景使用
- 不再需要一張表的時候,用drop
- 想刪除部分資料行時候,用delete,並且帶上where子句
- 保留表而刪除所有資料的時候用truncate
超健、候選鍵、主鍵、外來鍵
超健
在關係中能唯一標識元組的屬性集稱為關係模式的超鍵。一個屬性可以為作為一個超鍵,多個屬性組合在一起也可以作為一個超鍵。超鍵包含候選鍵和主鍵。
候選鍵
最小超鍵,即沒有冗餘元素的超鍵。
主鍵
資料庫表中對儲存資料物件予以唯一和完整標識的資料列或屬性的組合。一個數據列只能有一個主鍵,且主鍵的取值不能缺失,即不能為空值(Null)。
外來鍵
在一個表中存在的另一個表的主鍵稱此表的外來鍵。
檢視
檢視的定義
檢視是一種虛擬的表,具有和物理表相同的功能。可以對檢視進行增,改,查,操作。檢視通常是有一個表或者多個表的行或列的子集。對檢視的修改不影響基本表。它使得我們獲取資料更容易,相比多表查詢。
檢視的使用場景
- 只暴露部分欄位給訪問者,所以就建一個虛表,就是檢視
- 查詢的資料來源於不同的表,而查詢者希望以統一的方式查詢,這樣也可以建立一個檢視,把多個表查詢結果聯合起來,查詢者只需要直接從檢視中獲取資料,不必考慮資料來源於不同表所帶來的差異
優點
- 對資料庫的訪問,因為檢視可以有選擇性的選取資料庫裡的一部分
- 使用者通過簡單的查詢可以從複雜查詢中得到結果
- 維護資料的獨立性,試圖可從多個表檢索資料
- 對於相同的資料可產生不同的檢視
缺點
- 效能:查詢檢視時,必須把檢視的查詢轉化成對基本表的查詢,如果這個檢視是由一個複雜的多表查詢所定義,那麼,那麼就無法更改資料
正規化
- 第一正規化
資料庫表中的欄位都是單一屬性的,不可再分。 - 第二正規化
所有非關鍵欄位都完全依賴於任意一組候選關鍵字。 - 第三正規化
在第二正規化的基礎上,資料表中如果不存在非關鍵欄位對任一候選關鍵欄位的傳遞函式依賴則符合第三正規化。
樂觀鎖和悲觀鎖
作用
確保在多個事務同時存取資料庫中同一資料時不破壞事務的隔離性和統一性以及資料庫的統一性,樂觀鎖和悲觀鎖是併發控制主要採用的技術手段
悲觀鎖
假定會發生併發衝突,遮蔽一切可能違反資料完整性的操作
在查詢完資料的時候就把事務鎖起來,直到提交事務
實現方式:使用資料庫中的鎖機制
樂觀鎖
假設不會發生併發衝突,只在提交操作時檢查是否違反資料完整性
在修改資料的時候把事務鎖起來,通過version的方式來進行鎖定
實現方式:使用version版本或者時間戳
表的連線方式
型別
- 內連線
- 自連線
- 外連線
- 交叉連線
內連線
只有兩個元素表相匹配的才能在結果集中顯示
外連線
左外連線:左邊為驅動表,驅動表的資料全部顯示,匹配表的不匹配的不會顯示
右外連線:右邊為驅動表,驅動表的資料全部顯示,匹配表的不匹配的不會顯示
全外連線:連線的表中不匹配的資料全部會顯示出來
交叉連線
笛卡爾效應,顯示的結果是連結表數的乘積
優化資料庫查詢語句速度
- 建索引
- 減少表之間的關聯
- 優化sql,儘量讓sql很快定位資料,不要讓sql做全表查詢,應該走索引,把資料量大的表排在前面
- 簡化查詢欄位,沒用的欄位不要,已經對返回結果的控制,儘量返回少量資料
- 儘量用PreparedStatement來查詢,不要用Statement