資料庫常見面試題總結

coding_1994發表於2018-07-12

資料庫常見面試題總結

1. 資料庫三正規化是什麼?

第一正規化:表中每個欄位都不能再分。
第二正規化:滿足第一正規化並且表中的非主鍵欄位都依賴於主鍵欄位。
第三正規化:滿足第二正規化並且表中的非主鍵欄位必須不傳遞依賴於主鍵欄位。

2. 什麼是資料庫事務?

事務具有四大特性:一致性、原子性、隔離性、永續性。
資料庫事務是指:幾個SQL語句,要麼全部執行成功,要麼全部執行失敗。比如銀行轉賬就是事務的典型場景。
資料庫事務的三個常用命令:Begin Transaction、Commit Transaction、RollBack Transaction。

3. 什麼是檢視?

檢視實際上是在資料庫中通過Select查詢語句從多張表中提取的多個表欄位所組成的虛擬表。
l 檢視並不佔據物理空間,所以通過檢視查詢出的記錄並非儲存在檢視中,而是儲存在原表中。
l 通過檢視可以對指定使用者隱藏相應的表欄位,起到保護資料的作用。
l 在滿足一定條件時,可以通過檢視對原表中的記錄進行增刪改操作。
l 建立檢視時,只能使用單條select查詢語句。

4. 什麼是索引?

索引是對資料庫表中一列或多列的值進行排序的一種結構,使用索引可快速訪問資料庫表中的特定資訊。
l 索引分為:聚集索引、非聚集索引、唯一索引等。
l 一張表可以有多個唯一索引和非聚集索引,但最多隻能有一個聚集索引。
l 索引可以包含多列。
l 合理的建立索引能夠提升查詢語句的執行效率,但降低了新增、刪除操作的速度,同時也會消耗一定的資料庫物理空間。

5. 什麼是儲存過程?

儲存過程是一個預編譯的SQL語句,優點是允許模組化的設計,就是說只需建立一次,以後在該程式中就可以呼叫多次。如果某次操作需要執行多次SQL,使用儲存過程比單純SQL語句執行要快。

6. 什麼是觸發器?

觸發器是一中特殊的儲存過程,主要是通過事件來觸發而被執行的。它可以強化約束,來維護資料的完整性和一致性,可以跟蹤資料庫內的操作從而不允許未經許可的更新和變化。可以聯級運算。如,某表上的觸發器上包含對另一個表的資料操作,而該操作又會導致該表觸發器被觸發。

7. 寫出一條Sql語句:取出表A中第31到第40記錄 (MS-SQLServer)

解1:select top 10 * from A where id not in (select top 30 id from A)
解2:select top 10 * from A where id > (select max(id) from (select top 30 id from A )as A)
解3:select * from (select *, Row_Number() OVER (ORDER BY id asc) rowid FROM A) as A where rowid between 31 and 40

8. 寫出一條Sql語句:取出表A中第31到第40記錄 (Mysql)

select * from A limit 30, 10

9. 寫出一條Sql語句:取出表A中第31到第40記錄 (Oracle)

select *
from (select A.*,
   row_number() over (order by id asc) rank
    FROM A)   
where rank >=31 AND rank<=40;

10. 在關係型資料庫中如何描述多對多的關係?

在關係型資料庫中描述多對多的關係,需要建立第三張資料表。比如學生選課,需要在學生資訊表和課程資訊表的基礎上,再建立選課資訊表,該表中存放學生Id和課程Id。

11. 什麼是資料庫約束,常見的約束有哪幾種?

資料庫約束用於保證資料庫表資料的完整性(正確性和一致性)。可以通過定義約束\索引\觸發器來保證資料的完整性。
總體來講,約束可以分為:
主鍵約束:primary key;
外來鍵約束:foreign key;
唯一約束:unique;
檢查約束:check;
空值約束:not null;
預設值約束:default;

12. 列舉幾種常用的聚合函式?

Sum:求和\ Avg:求平均數\ Max:求最大值\ Min:求最小值\ Count:求記錄數

13. 什麼是內聯接、左外聯接、右外聯接?

l 內聯接(Inner Join):匹配2張表中相關聯的記錄。
l 左外聯接(Left Outer Join):除了匹配2張表中相關聯的記錄外,還會匹配左表中剩餘的記錄,右表中未匹配到的欄位用NULL表示。
l 右外聯接(Right Outer Join):除了匹配2張表中相關聯的記錄外,還會匹配右表中剩餘的記錄,左表中未匹配到的欄位用NULL表示。
在判定左表和右表時,要根據表名出現在Outer Join的左右位置關係。

14. 如何在刪除主表記錄時,一併刪除從表相關聯的記錄?

如果兩張表存在主外來鍵關係,那麼在刪除主鍵表的記錄時,如果從表有相關聯的記錄,那麼將導致刪除失敗。
在定義外來鍵約束時,可以同時指定3種刪除策略:一是將從表記錄一併刪除(級聯刪除);二是將從表記錄外來鍵欄位設定為NULL;三是將從表記錄外來鍵欄位設定為預設值。
級聯刪除示例:
alter table 從表名
add constraint 外來鍵名
foreign key(欄位名) references 主表名(欄位名)
on delete cascade

15. 什麼是遊標?

遊標實際上是一種能從包括多條資料記錄的結果集中每次提取一條記錄進行處理的機制。
遊標的使用步驟:
1. 定義遊標:declare cursor 遊標名稱 for  select查詢語句 [for {readonly|update}]
2. 開啟遊標:open cursor
3. 從遊標中運算元據:fetch... ...   current of cursor
 
4. 關閉遊標:close cursor

相關文章