數據庫常見面試題


1、觸發器的作用?

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

2、什么是存儲過程?用什么來調用?

存儲過程是一個預編譯的SQL語句。優點是允許模塊化的設計,就是說只需創建一次,以后在該程序中就可以調用多次。如果某次操作需要執行多次SQL,使用存儲過程比單純SQL語句執行要快。調用:1)可以用一個命令對象來調用存儲過程 2)可以供外部程序調用,比如:Java程序

3、存儲過程的優缺點?

優點:1)存儲過程是預編譯過的,執行效率高 2)存儲過程的代碼直接存放於數據庫中,通過存儲過程名直接調用,減少網絡通訊 3)安全性高,執行存儲過程需要有一定權限的用戶 4)存儲過程可以重復使用,可以減少數據庫開發人員的工作量

缺點:移植性差

4、索引的作用?優缺點?

索引是一種特殊的查詢表,數據庫的搜索可以利用它加速對數據的檢索。他很類似與現實生活中的目錄,不需要查詢整本書的內容就可以找到想要的數據。索引可以是唯一的,創建索引允許指定單個列或者是多個列。缺點是減慢了數據錄入的速度,同時也增加了數據庫的尺寸大小

5、什么樣的字段適合創建索引?

唯一、不為空、經常被查詢的字段

6、索引的類型有哪些?

邏輯上

單行索引、多行索引、唯一索引、非唯一索引、函數索引、域索引

物理上:

分區索引、非分區索引

7、什么是事務?什么是鎖?

事務就是被綁定在一起作為一個邏輯工作單元的SQL語句分組,如果任何一個語句操作失敗,以后的操作就會回滾到操作前狀態,或者是上一個節點。為了確保要么執行,要么不執行,就可以使用事務。要將有組語句作為事務考慮,就需要通過ACID測試,即原子性,一致性,隔離性和持久性。

鎖:是實現事務的關鍵,所可以保證事務的完整性和並發行,與現實生活中的鎖一樣,可以使某些數據的擁有者,在某段時間內不能使用某些數據或者數據結構。

8、什么是視圖?優缺點?

視圖:是一種虛表,其本質是一個SQL語句,為了方便查詢,是一個表或者多個表的行或列的子集。對視圖的修改會影響基本表。視圖創建后不會自動消失,必須人為刪除。

視圖的優缺點?

優點:1)對數據庫的訪問,因為視圖可以有選擇性的選取數據庫里的一部分。2)用戶通過簡單的查詢可以從復雜查詢里得到結果。3)維護數據的獨立性,視圖可從多個表檢索數據 4)對於相同的數據,可以產生不同的視圖

缺點:性能:查詢視圖時,必須把視圖的查詢轉換成對基本表的查詢,如果這個視圖是又由一個復雜的多表查詢所定義,那么就無法更改數據

9、列舉幾種表的連接方式?區別?

內連接、自連接、外連接、交叉連接

內連接:只有兩個元素表相匹配的才能在結果集中顯示。

外連接:

左外連接:左邊為驅動表,驅動表的數據全部顯示,匹配表的不匹配的不會顯示。

右外連接:右邊為驅動表,驅動表的數據全部顯示,匹配表的不匹配的不會顯示。

全外連接:連接的表中不匹配的數據全部會顯示出來。

交叉連接: 笛卡爾效應,顯示的結果是鏈接表數的乘積。

10、主鍵和外鍵的區別?

主鍵在本表中是唯一的,不可為空的,外鍵可以重復,可以為空

外鍵和另一張表的主鍵關聯,不能創建對應表中不存在的外鍵

11、在數據庫中查詢語句速度很慢時,如何優化?

1)創建索引 2)減少表之間連接 3)優化sql,盡量讓sql很快定位數據,不要做全表查詢,盡量使用索引,把數據量大的表排在前面 4)簡化查詢字段,沒用的字段不要,盡量返回少量數據 5、盡量用PreparedStatement來查詢,不要用Statement

12、當數據庫的數據量很大時,有什么優化方案?

1)創建索引 2)對緩存進行配置,修改緩存的大小,當再次查詢相同的條件時,可以從緩存中進行獲取 3)對慢查詢日志進行分析,進行有目的的優化 4)分庫分表,對數據量進行分流 5)子查詢優化,子句中用到in或exist關鍵字時,可以用join查詢替代,服務器對join的查詢優化遠高於子查詢優化

13、數據庫的三范式?

第一范式:列不可再分

第二范式:行可以唯一區分,主鍵約束

第三范式:表的非主屬性不能依賴與其他表的非主屬性 外鍵約束

14、varchar和char的區別?

char定長,varchar為邊長;char中英文字符占一字節,中文占兩字節,varchar中英文字符均占兩字節

15、從數據庫中隨機取50條數據

select * from 表 order by rand() limit50;

16、order by 和 group by

order by:排序查詢:desc 降序  asc 升序

group by:分組查詢:having 只能用於group by子句、作用於組內,having條件子句可以直接跟函數表達式。使用group by 子句的查詢語句需要使用聚合函數。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM