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 子句的查詢語句需要使用聚合函數。
