轉自於: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。