1. 程式人生 > >2018年最新JAVA面試題總結之資料庫(3)

2018年最新JAVA面試題總結之資料庫(3)

轉自於:https://zhuanlan.zhihu.com/p/39804394

 

1、MySQL的delete與truncate區別?

回答:delete語句執行刪除的過程是每次從表中刪除一行,並且同時將該行的刪除操作作為事務記錄在日誌中儲存以便進行回滾操作,不清空AUTO_INCREMENT記錄數;

truncate則直接將表刪除並重新建表,不會把單獨的刪除操作記錄記入日誌儲存,刪除行是不能恢復的,AUTO_INCREMENT將置為0,效率比delete高。

2、MySQL的儲存過程是什麼?
回答:儲存過程是一組為了完成特定功能的SQL語句集,經編譯後儲存在資料庫中,使用者通過指定儲存過程的名字並給定引數(如果該儲存過程帶有引數)來呼叫執行它;
建立儲存過程:”pr_add”是個簡單的MySQL儲存過程,這個MySQL儲存過程有兩個int型別的輸入引數”a”,”b”,返回這兩個引數的和。

1)drop procedure if exists pr_add;

2)計算兩個數之和

create procedure pr_add( a int , b int )begin declare c int;

if a is null then set a = 0;

end if;

if a is null then set b = 0;

end if;
set c = a+b;
select c as sum ; 

3、談談你對索引的理解?
回答:索引是對資料庫中一對多個列值的排序,幫助資料庫高效獲取資料的資料結構。假如我們用類比的方法,資料庫中的索引就相當於書籍中的目錄一樣,當我們想找到書中的某個知識點,我們可以直接去目錄中找而不是在書中每頁的找,但是這也丟擲了索引的一個缺點,在對資料庫修改的時候要修改索引,導致時間變多。
索引分為:普通索引,唯一索引,主鍵索引,全文索引

優點:加快檢索速度;唯一索引確保每行資料的唯一性;在使用索引的過程可以優化隱藏器,提高系統性能

缺點:插入刪除,修改,維護速度下降;佔用物理和資料空間;

4、簡單描述一下資料庫的事務?
回答:應用的場景:存在併發資料訪問時才需要事務
ACID四大特性:a)原子性:整個事務中的所有操作,要麼全部完成,要麼全部不完成,不可能停滯在中間的某個環節。任何一項操作的失敗都會導致整個事務的失敗;

b)一致性:在事務開始之前和事務結束之後,資料庫的完整性約束沒有被破壞;

c)隔離性:併發執行的事務彼此無法看到對方的中間狀態;

d)永續性:在事務完成以後,該事務所對資料庫所操作的更改便持久的儲存在資料庫之中,並不會被回滾。

問題:a)髒讀:一個事務讀取到另一個事務未提交的資料

b)不可重複讀:一個事務中兩次查詢的資料不一致 -->一個事務讀到了另一個事務,已經提交資料(update 操作)

c)虛讀(幻讀):一個事務中兩次查詢的資料不一致 -->一個事務讀到了另一個事務,已經提交資料(insert 操作)
隔離級別:安全從低到高,效能從高到低;

a)讀未提交:也叫髒讀,是事務可以讀取其他事務未提交的資料。—>未解決任何問題

b)讀已提交:在事務未提交之前所做的修改其它事務是不可見的。—>解決髒讀問題

c)可重複讀:保證同一個事務中的多次相同的查詢的結果是一致的。—>解決髒讀,不可重複讀的問題

d)可序列化:保證讀取的範圍內沒有新的資料插入,比如事務第一次查詢得到某個範圍的資料,第二次查詢也同樣得到了相同範圍的資料,中間沒有新的資料插入到該範圍中。—>解決髒讀,不可重複讀,虛讀(幻讀)問題。


常用資料庫預設隔離級別:

MySQL:可重複讀;Oracle:讀已提交;SQLServe:讀已提交。r

5、Oracle是怎麼樣分頁的?
回答:Oracle中使用rownum來進行分頁,這個是效率最好的分頁方法,hibernate也是使用rownum來進行Oracle分頁的;
select * from

(select round r,a from tabName where round <= 20)

where r > 10 

6、說說Oracle中經常使用到得函式?
回答:Length長度 、lower 小寫、upper 大寫、to_date 轉化日期、to_char 轉化字元,Ltrim 去左邊空格、substr 取字串、add_month 增加或者減掉月份、to_number 轉變為數字
7、談談你對Oracle高水位的理解?
回答:所有的oracle段(segments,在此,為了理解方便,建議把segment作為表的一個同義詞) 都有一個在段內容納資料的上限,我們把這個上限稱為"high water mark"或HWM。這個HWM是一個標記,用來說明已經有多少沒有使用的資料塊分配給這個segment。HWM通常增長的幅度為一次5個數據塊,原則上HWM只會增大,不會縮小,即使將表中的資料全部刪除,HWM還是為原值,由於這個特點,使HWM很象一個水庫的歷史最高水位,這也就是HWM的原始含義,當然不能說一個水庫沒水了,就說該水庫的歷史最高水位為0。但是如果我們在表上使用了truncate命令,則該表的HWM會被重新置為0。
8、MySQL、Oracle、SqlServer三者之間的區別?
回答:
1. mysql
使用風險:SQL server 完全重寫程式碼經歷了長期測試,需要時間來證明並十分相容;
優點:
體積小、速度快、總體擁有成本低,開源;支援多種作業系統;是開源資料庫,提供的介面支援多種語言連線操作。

缺點:
不支援熱備份;
MySQL最大的缺點是其安全系統,主要是複雜而非標準,另外只有到呼叫mysqladmin來重讀使用者許可權時才發生改變;
沒有一種儲存過程(Stored Procedure)語言,這是對習慣於企業級資料庫的程式設計師的最大限制;
MySQL的價格隨平臺和安裝方式變化。Linux的MySQL如果由使用者自己或系統管理員而不是第三方安裝則是免費的,第三方案則必須付許可費。Unix或Linux 自行安裝 免費 、Unix或Linux 第三方安裝 收費;
2. oracle
優點:
開放性:Oracle 能在所有主流平臺上執行(包括 windows)完全支援所有工業標準, 採用完全開放策略,使客戶選擇適合解決方案;
可伸縮性,並行性:Oracle 並行伺服器通過使組結點共享同簇工作來擴充套件windownt能 力,提供高用性和高伸縮性簇解決方案。
安全性:獲得最高認證級別的ISO標準認證。 
效能:Oracle 效能高 保持開放平臺下TPC-D和TPC-C世界記錄;
客戶端支援及應用模式:Oracle 多層次網路計算支援多種工業標準用ODBC、JDBC、OCI 等網路客戶連線 
使用風險:Oracle 長時間開發經驗完全向下相容得廣泛應用地風險低 。
缺點:
對硬體的要求很高;
價格比較昂貴;
管理維護麻煩一些;
操作比較複雜,需要技術含量較高;
3. sqlserver
優點:
易用性、適合分散式組織的可伸縮性、用於決策支援的資料倉庫功能、與許多其他服 器軟體緊密關聯的整合性、良好的價效比等;
SQLServer是一個具備完全Web支援的資料庫產品,提供了對可擴充套件標記語言 (XML) 的核心支援以及在Internet上和防火牆外進行查詢的能力;
缺點:SQL Server 只能windows上執行,沒有絲毫開放性作業系統。
伸縮性並行性 :資料卷伸縮性有限;
安全性:沒有獲得任何安全證書。
效能 :SQL Server 多使用者時效能佳 ;
客戶端支援及應用模式: 客戶端支援及應用模式。只支援C/S模式,SQL Server C/S 結構只支援windows客戶用ADO、DAO、OLEDB、ODBC連線;

9、資料庫語句優化有哪些?


回答:1、對查詢進行優化,應儘量避免全表掃描,首先應考慮在where 及 order by 涉及的列上建立索引。
2、應儘量避免在where 字句中對欄位進行null 值判斷,否則將導致引擎放棄使用索引二進行全表掃描。

3、應儘量避免在where 字句中使用or 來連線條件,否則將導致引擎放棄使用索引二進行全表掃描。

4、應儘量避免在where字句中使用!=或<>操作符,否則引擎將放棄使用索引二進行全表掃描。

5、in 和 not in 也要慎用,否則會導致全表掃描。

6、索引並不是越多越好,索引固然可以提高相應的select 的效率,但同時也降低了 insert 及 update 的效率,因為insert 或update時有可能會重建索引,所以怎樣建索引需要慎重考慮,視具體情況而定。一個表的索引數最好不要超過6個,若太多則應考慮一些不常用到的列上建的索引是否有必要。

7、查詢結果不要用 * 來查詢所有欄位,要明確指明結果欄位。

8、根據查詢條件,簡歷索引,如果查詢條件不止一個時,使用組合索引。

9、在查詢條件表示式的左側儘量不要使用函式,否則索引失效。

10、如果有like話,儘量避免%xxx%兩側都有%的條件,單側%可以使用索引,多側不可以。

11、建立索引時欄位不能有null值


10、MySQL資料庫優化有哪些?

回答:1. EXPLAIN 你的 SELECT 查詢;2. 當只要一行資料時使用 LIMIT 1;3. 使用 ENUM 而不是 VARCHAR;4. 固定長度的表會更快;5. 分庫分表


11、Oracle資料庫優化有哪些?


回答:1、調整資料結構的設計。2、調整作業系統引數。3、調整應用程式結構設計。4、調整資料庫SQL語句。5、調整伺服器記憶體分配。6、調整硬碟I/O。