1. 程式人生 > >二、面試準備-資料庫知識

二、面試準備-資料庫知識

1、Oracle中truncate和delete命令區別

執行速度truncate>delete。

delete語句執行刪除的過程是每次從表中刪除一行,並且同時將該行的刪除操作做為事務記錄在日誌中以便進行回滾操作。

truncate則是一次性的從表中刪除所有的資料頁並不把單獨的刪除操作記錄記入日誌儲存。刪除行是不能恢復的。

truncate是一個DDL(資料庫定義語言)語言,執行完後會被隱式提交,不能對truncate使用rollback命令。

delete是一個DML(資料庫操作語言)語言,執行完後能使用rollback命令恢復資料。

truncate不能觸發任何delete觸發器。

2、Oracle中char和varchar2資料型別區別

char的長度是固定的,而varchar2的長度是可以變化的。

比如,儲存字串"abc",對於char(20),表示儲存的字元將佔20個位元組(包括17個空字元),在資料庫中它是以空格佔位的,而同樣的varchar2(20)則只佔用3個位元組的長度,20只是最大值,當儲存的字元小於20時,按實際長度儲存。

標準的varchar型別可以儲存空字串。
Oracle的varchar2型別將在資料庫中varchar列可以儲存空字串的特性改為儲存null值。

varchar2比char節省空間、char的效率比varchar2高。 資料庫設計上的“以空間換效率”。

3、主鍵和索引的區別

建立表時,不能在同一個欄位上建立兩個索引(主鍵預設建立唯一索引),可以在需要經常查詢的欄位欄位上建立索引。比如已經是主鍵的欄位不能再建立索引。

主鍵:該欄位沒有重複值,且不允許為空。
唯一索引:該欄位沒有重複值,但允許空值。

一個表只允許有一個主鍵,但可以建立多個唯一索引(unique index)。
可以為一張表的多個欄位建立唯一索引。

函式索引:

如果在我們的查詢條件使用了函式,那麼索引就不可用了。
例如:select * from product where nvl(price,0.0)>1000.0;
這裡,nvl(price,0.0)使用了函式,索引不能利用price欄位上做的索引了。
可以用建立函式索引的方式,來解決這個問題。create index 索引名 on product(nvl(price,0.0));

建立索引:create unique index 索引名 on 表名(欄位1,欄位2);

刪除索引:drop index 索引名;

唯一索引能極大的提高查詢速度,而且還有唯一約束的作用。
一般索引,只能提高30%左右的速度。
經常插入,修改,應在查詢允許的情況下,儘量減少索引,因為新增索引,插入,修改等操作,需要更多的時間。
a.主鍵一定是唯一索引,唯一索引並不一定就是主鍵。
b.一個表中可以有多個唯一索引,但只能有一個主鍵。
c.主鍵列不允許空值,唯一索引列允許空值。
d.索引可以提高查詢速度。

主鍵和索引都是主鍵,不過主鍵是邏輯建,索引是物理鍵,也就是說主鍵不實際存在,而索引實際存在在資料庫中。

4、儲存過程與函式的區別

儲存過程是一組為了完成特定功能的SQL語句集,經編譯後儲存在資料庫中,使用者通過指定儲存過程的名字並給定引數(如果該儲存過程帶有引數)來呼叫執行它。

一個儲存過程可以由SQL語句和一些特殊的控制結構組成。當希望在不同的應用平臺上執行相同的函式,或者封裝特定功能時,儲存過程是非常有用的。

儲存過程的優點:
a.儲存過程可以用流程控制語言編寫,可以完成複雜的判斷和運算,有很強的靈活性。
b.儲存過程被建立後,可以在程式中被多次呼叫。
c.儲存過程是預編譯的,能夠提高執行速度。

區別:

儲存過程一般作為一個獨立的部分執行,而函式可以作為SQL語句的一個部分來使用。
返回多個引數值使用儲存過程,只有一個返回值可以使用函式。