資料庫SQL面試知識點整理

2021-09-26 09:17:02 字數 3013 閱讀 9127

一)什麼是儲存過程?有哪些優缺點?

儲存過程是一些預編譯的sql語句。

更加直白的理解:儲存過程可以說是乙個記錄集,它是由一些t-sql語句組成的**塊,這些t-sql語句**像乙個方法一樣實現一些功能(對單錶或多表的增刪改查),然後再給這個**塊取乙個名字,在用到這個功能的時候呼叫他就行了。

儲存過程是乙個預編譯的**塊,執行效率比較高

乙個儲存過程替代大量t_sql語句 ,可以降低網路通訊量,提高通訊速率

可以一定程度上確保資料安全。

(二)索引是什麼?有什麼作用以及優缺點?

索引是對資料庫表中一或多個列的值進行排序的結構,是幫助mysql高效獲取資料的資料結構。

你也可以這樣理解:索引就是加快檢索表中資料的方法。資料庫的索引類似於書籍的索引。在書籍中,索引允許使用者不必翻閱完整個書就能迅速地找到所需要的資訊。在資料庫中,索引也允許資料庫程式迅速地找到表中的資料,而不必掃瞄整個資料庫。

mysql資料庫幾個基本的索引型別:普通索引、唯一索引、主鍵索引、全文索引

索引加快資料庫的檢索速度

索引降低了插入、刪除、修改等維護任務的速度

唯一索引可以確保每一行資料的唯一性

通過使用索引,可以在查詢的過程中使用優化隱藏器,提高系統的效能

索引需要佔物理和資料空間

(三)什麼是事務?

事務(transaction)是併發控制的基本單位。所謂的事務,它是乙個操作序列,這些操作要麼都執行,要麼都不執行,它是乙個不可分割的工作單位。事務是資料庫維護資料一致性的單位,在每個事務結束時,都能保持資料一致性。

(四)資料庫的樂觀鎖和悲觀鎖是什麼?

資料庫管理系統(dbms)中的併發控制的任務是確保在多個事務同時訪問資料庫中同一資料時不破壞事務的隔離性和統一性以及資料庫的統一性。

樂觀併發控制(樂觀鎖)和悲觀併發控制(悲觀鎖)是併發控制主要採用的技術手段。

悲觀鎖:假定會發生併發衝突,遮蔽一切可能違反資料完整性的操作

樂觀鎖:樂觀鎖是假定讀取的資料,在寫之前不會被更新。適用於資料更新不頻繁的場景。假設不會發生併發衝突,只在提交操作時檢查是否違反資料完整性。

兩種鎖都是為了解決併發情況下的寫衝突

用那種機制,取決於你的場景。要記住,總目標和原則都是:提高寫效率。

悲觀鎖是early lock,樂觀鎖是late lock。因此:

對於資料更新頻繁的場合,悲觀鎖效率更高

對於資料更新不頻繁的場合,樂觀鎖效率更高

如果併發競爭比較嚴重就使用悲觀鎖(一鎖二查三更新),否則就使用樂觀鎖,這兩個可以用來作為分布式鎖。

(五) 使用索引查詢一定能提高查詢的效能嗎?為什麼

通常,通過索引查詢資料比全表掃瞄要快.但是我們也必須注意到它的代價.

索引需要空間來儲存,也需要定期維護, 每當有記錄在表中增減或索引列被修改時,索引本身也會被修改. 這意味著每條記錄的insert,delete,update將為此多付出4,5 次的磁碟i/o. 因為索引需要額外的儲存空間和處理,那些不必要的索引反而會使查詢反應時間變慢.

使用索引查詢不一定能提高查詢效能,索引範圍查詢(index range scan)適用於兩種情況:

基於乙個範圍的檢索,一般查詢返回結果集小於表中記錄數的30%

基於非唯一性索引的檢索

(六)簡單說一說drop、delete與truncate的區別

sql中的drop、delete、truncate都表示刪除,但是三者有一些差別

delete和truncate只刪除表的資料不刪除表的結構

速度,一般來說: drop> truncate >delete

delete語句是dml,這個操作會放到rollback segement中,事務提交之後才生效;

如果有相應的trigger,執行的時候將被觸發. truncate,drop是ddl, 操作立即生效,原資料不放到rollback segment中,不能回滾. 操作不觸發trigger.

(七)drop、delete與truncate分別在什麼場景之下使用?

不再需要一張表的時候,用drop

想刪除部分資料行時候,用delete,並且帶上where子句

保留表而刪除所有資料的時候用truncate

(八) 超鍵、候選鍵、主鍵、外來鍵分別是什麼?

超鍵:在關係中能唯一標識元組的屬性集稱為關係模式的超鍵。乙個屬性可以為作為乙個超鍵,多個屬性組合在一起也可以作為乙個超鍵。超鍵包含候選鍵和主鍵。

候選鍵:是最小超鍵,即沒有冗餘元素的超鍵。

主鍵:資料庫表中對儲存資料物件予以唯一和完整標識的資料列或屬性的組合。乙個資料列只能有乙個主鍵,且主鍵的取值不能缺失,即不能為空值(null)。

外來鍵:在乙個表中存在的另乙個表的主鍵稱此表的外來鍵。

(九)什麼是檢視?以及檢視的使用場景有哪些?

檢視是一種虛擬的表,具有和物理表相同的功能。可以對檢視進行增,改,查,操作,試圖通常是有乙個表或者多個表的行或列的子集。對檢視的修改不影響基本表。它使得我們獲取資料更容易,相比多表查詢。

只暴露部分欄位給訪問者,所以就建乙個虛表,就是檢視。

查詢的資料**於不同的表,而查詢者希望以統一的方式查詢,這樣也可以建立乙個檢視,把多個表查詢結果聯合起來,查詢者只需要直接從檢視中獲取資料,不必考慮資料**於不同表所帶來的差異

最大堆的具體實現

單例模式

同步字段

資料庫知識點整理

一 資料庫三正規化 第一正規化 確保每列保持原子性 即所有字段值都是不可分解的原子值。需要根據實際情況劃分,比如 位址 可以當作,如果經常關注位址中的城市部分,就要把位址拆成省份,城市,詳細位址多個字段。列不能再分 第二正規化 確保表中的每列都和主鍵相關 即需要確保資料庫表中每一列都和主鍵相關,而不...

oracle資料庫知識點整理

1 行列轉換 2 一條sql語句取出整個樹形結構 pid 0 是根節點的資料,id 主鍵,pid父id select from rc area start with pid 0 connect by prior id pid 3 number p,s 有效數字和精度 number p,s p 1 3...

面試知識點整理

new操作符都幹了什麼?1.先建立了乙個新的空物件 2.然後讓這個空物件的proto指向函式的原型prototype 3.將物件作為函式的this傳進去,如果return 出來東西是物件的話就直接返回 return 的內容,沒有的話就返回建立的這個物件。標籤有什麼用?解決父子元素margin top...