Java_資料庫面試題

it_ape2233發表於2018-12-02

什麼是資料庫事務?

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


什麼是檢視?

檢視實際上是在資料庫中通過Select查詢語句從多張表中提取的多個表欄位所組成的虛擬表。

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

什麼是索引?

索引是對資料庫表中一列或多列的值進行排序的一種結構,使用索引可快速訪問資料庫表中的特定資訊。

  • l 索引分為:聚集索引、非聚集索引、唯一索引等。
  • l 一張表可以有多個唯一索引和非聚集索引,但最多隻能有一個聚集索引。
  • l 索引可以包含多列。
  • l 合理的建立索引能夠提升查詢語句的執行效率,但降低了新增、刪除操作的速度,同時也會消耗一定的資料庫物理空間。

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

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

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

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

  • 索引加快資料庫的檢索速度
  • 索引降低了插入、刪除、修改等維護任務的速度
  • 唯一索引可以確保每一行資料的唯一性
  • 通過使用索引,可以在查詢的過程中使用優化隱藏器,提高系統的效能
  • 索引需要佔物理和資料空間

什麼是儲存過程?

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


什麼是觸發器?

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


寫出一條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

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

select * from A limit 30, 10

寫出一條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;

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

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


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

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

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

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


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

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

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

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

alter table 從表名
add constraint 外來鍵名
foreign key(欄位名) references 主表名(欄位名)
on delete cascade

什麼是遊標?

遊標實際上是一種能從包括多條資料記錄的結果集中每次提取一條記錄進行處理的機制。
遊標的使用步驟:

  1. 定義遊標:declare cursor 遊標名稱 for select查詢語句 [for {readonly|update}]
  2. 開啟遊標:open cursor
  3. 從遊標中運算元據:fetch… … current of cursor
  4. 關閉遊標:close cursor

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

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

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

  • 悲觀鎖:假定會發生併發衝突,遮蔽一切可能違反資料完整性的操作
  • 樂觀鎖:假設不會發生併發衝突,只在提交操作時檢查是否違反資料完整性。

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

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

索引需要空間來儲存,也需要定期維護, 每當有記錄在表中增減或索引列被修改時,索引本身也會被修改. 這意味著每條記錄的INSERT,DELETE,UPDATE將為此多付出4,5 次的磁碟I/O. 因為索引需要額外的儲存空間和處理,那些不必要的索引反而會使查詢反應時間變慢.使用索引查詢不一定能提高查詢效能,索引範圍查詢(INDEX RANGE SCAN)適用於兩種情況:

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

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

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

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

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

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


簡單說一說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,並且帶上where子句
* 保留表而刪除所有資料的時候用truncate

相關文章