數據庫方面

1.MYSQL數據庫引擎區別sql

· MyISAM:默認的MySQL插件式存儲引擎,它是在Web、數據倉儲和其餘應用環境下最常使用的存儲引擎之一。注意,經過更改STORAGE_ENGINE配置變量,可以方便地更改MySQL服務器的默認存儲引擎。
· InnoDB:用於事務處理應用程序,具備衆多特性,包括ACID事務支持。(提供行級鎖)
· BDB:可替代InnoDB的事務引擎,支持COMMIT、ROLLBACK和其餘事務特性。
· Memory:將全部數據保存在RAM中,在須要快速查找引用和其餘相似數據的環境下,可提供極快的訪問。
· Merge:容許MySQL DBA或開發人員將一系列等同的MyISAM表以邏輯方式組合在一塊兒,並做爲1個對象引用它們。對於諸如數據倉儲等VLDB環境十分適合。
· Archive:爲大量不多引用的歷史、歸檔、或安全審計信息的存儲和檢索提供了完美的解決方案。
· Federated:可以將多個分離的MySQL服務器連接起來,從多個物理服務器建立一個邏輯數據庫。十分適合於分佈式環境或數據集市環境。
· Cluster/NDB:MySQL的簇式數據庫引擎,尤爲適合於具備高性能查找要求的應用程序,這類查找需求還要求具備最高的正常工做時間和可用性。
· Other:其餘存儲引擎包括CSV(引用由逗號隔開的用做數據庫表的文件),Blackhole(用於臨時禁止對數據庫的應用程序輸入),以及Example引擎(可爲快速建立定製的插件式存儲引擎提供幫助)。
通常來講不使用事務的話,請使用MyISAM引擎,使用事務的話,通常使用InnoDB2.數據庫

2.SQL請寫一段SQL取出數據表中name重複的數據。(注意只須要重複的) 緩存

  答:SELECT * FROM member GROUP BY name having count(*)>1;tomcat

3.數據庫索引使用注意安全

數據庫索引是爲了加快查詢速度,可是會下降更新插入刪除的速度;若是每次都要獲取全部表記錄,那麼增長索引意義就不大了;對於大量重複值的字段增長索引也是沒意義的。針對記錄比較少的表增長索引反而會浪費存儲空間,而不會加快速度服務器

4.幾千G的數據怎麼查詢一條記錄比較快網絡

經過增長索引、幾千G數據放一張表不大現實,能夠經過分區,不過度區又會增長查詢難度;併發

5. 數據庫鏈接池原理、好處,tomcat中什麼位置增長?oracle

原理:是在內部對象池中維護必定數量的數據庫鏈接,並對外暴露數據庫鏈接獲取和返回方法。分佈式

好處:對於一個複雜的數據庫應用,頻繁的創建、關閉鏈接,會極大的減低系統的性能,由於對於鏈接的使用成了系統性能的瓶頸。數據庫鏈接池技術帶來的優點:

1)資源重用

2)更快的系統響應速度

3)新的資源分配手段

4)統一的鏈接管理,避免數據庫鏈接泄漏

Tomcat配置位置:在tomcat的context.xml中指定Resource的JNDI名稱;

6.數據庫冷備份和熱備份的不一樣點以及各自的優勢

熱備份針對歸檔模式的數據庫,在數據庫仍舊處於工做狀態時進行備份。而冷備份指在數據庫關閉後,進行備份,適用於全部模式的數據庫。

熱備份的優勢在於當備份時,數據庫仍舊能夠被使用而且能夠將數據庫恢復到任意一個時間點。冷備份的優勢在於它的備份和恢復操做至關簡單,而且因爲冷備份的數據庫能夠工做在非歸檔模式下,數據庫性能會比歸檔模式稍好。

7.MySQL存儲過程和函數有什麼區別?

在本質上它們都是存儲程序。函數只能經過return語句返回單個值或者表對象;而存儲過程 不容許執行return,可是能夠經過out參數返回多個值。函數限制比較多,不能用臨時表,只能用表變量,還有一些函數都不可用等等;而存儲過程的限制相對就比較少。函數能夠嵌入在SQL 語句中使用,能夠在SELECT語句中做爲查詢語句的一個部分調用;而存儲過程通常是做爲一個獨立的部分來執行。

(1)存儲過程當中的代碼能夠改變嗎?

目前,MySQL還不提供對已存在的存儲過程代碼的修改,若是必需要修改存儲過程,必須使用DROP語句刪除以後,再從新編寫代碼,或者建立一個新的存儲過程。

(2)存儲過程當中能夠調用其餘存儲過程嗎?

存儲過程包含用戶定義的SQL語句集合,可使用CALL語句調用存儲過程,固然在存儲 過程當中也可使用CALL語句調用其餘存儲過程,可是不能使用DROP語句刪除其餘存儲過程。

(3)存儲過程的參數不要與數據表中的字段名相同。

在定義存儲過程參數列表時,應注意把參數名與數據庫表中的字段名區別開來,不然將出 現沒法預期的結果。

(4)存儲過程的參數可使用中文嗎?

通常狀況下,可能會出現存儲過程當中傳入中文參數的狀況,例如某個存儲過程根據用戶的 名字查找該用戶的信息,傳入的參數值多是中文。這時須要在定義存儲過程的時候,在後面加 上character set gbk,否則調用存儲過程使用中文參數會出錯,好比定義userInfo存儲過程,代碼 以下:CREATE PROCEDURE useInfo(IN u_name VARCHAR(50) character set gbk, OUT u_age INT)

(5)存儲過程優勢

一、數據庫已經編譯過了,一次性編譯
二、執行速度快
三、能夠重複使用
四、安全性高
一、模塊化、提升程序安全性
二、減小網絡流量
三、提升系統性能、減輕工做站負荷
四、重複執行
存儲過程比直接寫SQL語句執行起來的速度快。
正如你所說的,存儲過程在執行時是會被SQL優化緩存的,而SQL語句則沒有。

8.數據庫事務特色

原子性:要麼全都執行,要麼全都不執行。
一致性:事務在完成時,必須使全部的數據都保持一致狀態。
隔離性:由併發事務所做的修改必須與任何其它併發事務所做的修改隔離。
持久性:事務完成以後,它對於系統的影響是永久性的。

9.數據庫三大範式

範式一:每一字段只存儲一個值
範式二:必須先符合範式一的條件,且每一行都能被惟一的識別。將範式一轉換成範式二的方法是添加主鍵。
範式三:沒有一個非關鍵屬性依賴於另外一個非關鍵屬性。

10.數據庫鎖機制

1).數據庫中有兩種基本的鎖類型:排它鎖(Exclusive Locks,即X鎖)和共享鎖(Share Locks,即S鎖)。當數據對象被加上排它鎖時,其餘的事務不能對它讀取和修改。加了共享鎖的數據對象能夠被其餘事務讀取,但不能修改。

2).悲觀封鎖、樂觀封鎖和死鎖

悲觀封鎖:

鎖在用戶修改以前就發揮做用: 
Select ..for update(nowait) 
Select * from tab1 for update 
用戶發出這條命令以後,oracle將會對返回集中的數據創建行級封鎖,以防止其餘用戶的修改。 
若是此時其餘用戶對上面返回結果集的數據進行dml或ddl操做都會返回一個錯誤信息或發生阻塞。 

樂觀封鎖

樂觀的認爲數據在select出來到update進取並提交的這段時間數據不會被更改。這裏面有一種潛在的危險就是因爲被選出的結果集並無被鎖定,是存在一種可能被其餘用戶更改的可能。所以Oracle仍然建議是用悲觀封鎖,由於這樣會更安全。

死鎖

當兩個用戶但願持有對方的資源時就會發生死鎖. 
即兩個用戶互相等待對方釋放資源時,oracle認定爲產生了死鎖,在這種狀況下,將以犧牲一個用戶做爲代價,另外一個用戶繼續執行,犧牲的用戶的事務將回滾。

11.甚麼時候會出現事務回滾,而甚麼時候不會出現事務回滾?如何設計事務回滾。

能夠在拋出異常的時候加入事務回滾方法;若數據庫不支持回滾,可給記錄行設定狀態序號和歷史狀態序號,更新前先設定狀態序號,若是成功了就把這個狀態序號設成歷史序號以表示提交,若是失敗了就把原始數據給恢復過來以回滾。

12.Orcale如何實現查詢出來的空值變成0?

答:真的要是把空值用0表示的話,oracle中有nvl函數

select nvl(columnName,0) from table

意思就是把columnName字段爲空的顯示成0,固然也能夠顯示成任何字符或者數字

13.Orcale如何實現查詢出來的兩個字段放在一個位置上?

答:oracle數據庫

select A || ':' || B from t

前提是A B字段都是字符型,假如不是,就用to_char()方法轉換成字符型

14.觸發器的具體含義和用法

觸發器是編寫的一段SQL語句,其關鍵字是TRIGGER(觸發器的意思),它附着於指定的表,做用主要在於監控其附着的表在產生特定動做時應作的SQL處理,使用觸發器的好處在於大大簡化了相關表的維護,將數據一致性問題交由數據庫後臺處理。

(1)使用觸發器時須特別注意。

在使用觸發器的時候須要注意,對於相同的表,相同的事件只能建立一個觸發器,好比對 表account建立了一個BEFORE INSERT觸發器,那麼若是對錶account再次建立一個BEFORE INSERT觸發器,MySQL將會報錯,此時,只能夠在表account上建立AFTER INSERT或者 BEFORE UPDATE類型的觸發器。靈活的運用觸發器將爲操做省去不少麻煩。

(2)及時刪除再也不須要的觸發器。

觸發器定義以後,每次執行觸發事件,都會激活觸發器並執行觸發器中的語句。若是需求 發生變化,而觸發器沒有進行相應的改變或者刪除,則觸發器仍然會執行舊的語句,從而會影響 新的數據的完整性。所以,要將再也不使用的觸發器及時刪除。

15.對內外鏈接的理解?

(1)、內鏈接:select * from a inner join b on a.id = b.id;

只顯示a.id與b.id相同的行,左邊顯示a表的字段,右邊顯示b表的字段;

(2)、左外鏈接:select * from a left join b on a.id = b.id;

左邊顯示a表的字段並顯示全部數據,右邊顯示b表的字段,只顯示a.id與b.id相同的行,其餘用null補充;

(3)、右外鏈接:select * from a right join b on a.id=b.id;

右邊顯示b表的字段並顯示全部數據,左邊顯示a表的字段,只顯示a.id與b.id相同的行,其餘用null補充;

(4)、徹底外鏈接:select * from a full join b on a.id=b.id;

左邊顯示a表字段,右邊顯示b表的字段;其中a.id與b.id相同的行全顯示,a.id與b.id不一樣的行,在a表中有數據的行在b中用null填充,在b表中有數據的行在a表中用null填充;

(5)、交叉鏈接:select * from a cross join b;

返回的行數是左邊與右邊行數的乘積;

16.Statement,PreparedStatement,CallableStatement區別

1).PreparedStatement是預編譯的,並支持批處理,對於批量處理能夠大大提升效率. 也叫JDBC存儲過程;能夠傳參數,在獲得PreparedStatement對象時肯定sql.

2).使用 Statement 對象。在對數據庫只執行一次性存取的時侯,用 Statement 對象進行處理。

statement用於執行靜態 SQL 語句並返回它所生成結果的對象,在執行時肯定sql。

3).CallableStatement用於執行 SQL 存儲過程的接口。若是有輸出參數要註冊說明是輸出參數。

17.是否是索引創建得越多越好?

合理的索引能夠提升查詢的速度,但不是索引越多越好。在執行插入語句的時候,MySQL 要爲新插入的記錄創建索引。因此過多的索引會致使插入操做變慢。原則上是隻有查詢用的字段 才創建索引。

18.如何使用查詢緩衝區?

查詢緩衝區能夠提升查詢的速度,可是這種方式只適合查詢語句比較多、更新語句比較少 的狀況。默認狀況下查詢緩衝區的大小爲〇,也就是不可用。能夠修改queiy_cache_size以調整 查詢緩衝區大小;修改query_cache_type以調整查詢緩衝區的類型。在my.ini中修改 query_cache_size 和 query_cache_type 的值

相關文章
相關標籤/搜索