1. 數據庫三范式是什么?
第一范式:表中每個字段都不能再分。
第二范式:滿足第一范式並且表中的非主鍵字段都依賴於主鍵字段。
第三范式:滿足第二范式並且表中的非主鍵字段必須不傳遞依賴於主鍵字段。
2. 什么是數據庫事務?
事務具有四大特性:一致性、原子性、隔離性、持久性。
數據庫事務是指:幾個SQL語句,要么全部執行成功,要么全部執行失敗。比如銀行轉賬就是事務的典型場景。
數據庫事務的三個常用命令:Begin Transaction、Commit Transaction、RollBack Transaction。
3. 什么是視圖?
視圖實際上是在數據庫中通過Select查詢語句從多張表中提取的多個表字段所組成的虛擬表。
l 視圖並不占據物理空間,所以通過視圖查詢出的記錄並非保存在視圖中,而是保存在原表中。
l 通過視圖可以對指定用戶隱藏相應的表字段,起到保護數據的作用。
l 在滿足一定條件時,可以通過視圖對原表中的記錄進行增刪改操作。
l 創建視圖時,只能使用單條select查詢語句。
4. 什么是索引?
索引是對數據庫表中一列或多列的值進行排序的一種結構,使用索引可快速訪問數據庫表中的特定信息。
l 索引分為:聚集索引、非聚集索引、唯一索引等。
l 一張表可以有多個唯一索引和非聚集索引,但最多只能有一個聚集索引。
l 索引可以包含多列。
l 合理的創建索引能夠提升查詢語句的執行效率,但降低了新增、刪除操作的速度,同時也會消耗一定的數據庫物理空間。
5. 什么是存儲過程?
存儲過程是一個預編譯的SQL語句,優點是允許模塊化的設計,就是說只需創建一次,以后在該程序中就可以調用多次。如果某次操作需要執行多次SQL,使用存儲過程比單純SQL語句執行要快。
6. 什么是觸發器?
觸發器是一中特殊的存儲過程,主要是通過事件來觸發而被執行的。它可以強化約束,來維護數據的完整性和一致性,可以跟蹤數據庫內的操作從而不允許未經許可的更新和變化。可以聯級運算。如,某表上的觸發器上包含對另一個表的數據操作,而該操作又會導致該表觸發器被觸發。
7. 寫出一條Sql語句:取出表A中第31到第40記錄 (MS-SQLServer)
解1:select top 10 * from A where id not in (select top 30 id from A)
解2:select top 10 * from A where id > (select max(id) from (select top 30 id from A )as A)
解3:select * from (select *, Row_Number() OVER (ORDER BY id asc) rowid FROM A) as A where rowid between 31 and 40
8. 寫出一條Sql語句:取出表A中第31到第40記錄 (Mysql)
select * from A limit 30, 10
9. 寫出一條Sql語句:取出表A中第31到第40記錄 (Oracle)
select *
from (select A.*,
row_number() over (order by id asc) rank
FROM A)
where rank >=31 AND rank<=40;
10. 在關系型數據庫中如何描述多對多的關系?
在關系型數據庫中描述多對多的關系,需要建立第三張數據表。比如學生選課,需要在學生信息表和課程信息表的基礎上,再建立選課信息表,該表中存放學生Id和課程Id。
11. 什么是數據庫約束,常見的約束有哪幾種?
數據庫約束用於保證數據庫表數據的完整性(正確性和一致性)。可以通過定義約束\索引\觸發器來保證數據的完整性。
總體來講,約束可以分為:
主鍵約束:primary key;
外鍵約束:foreign key;
唯一約束:unique;
檢查約束:check;
空值約束:not null;
默認值約束:default;
12. 列舉幾種常用的聚合函數?
Sum:求和\ Avg:求平均數\ Max:求最大值\ Min:求最小值\ Count:求記錄數
13. 什么是內聯接、左外聯接、右外聯接?
l 內聯接(Inner Join):匹配2張表中相關聯的記錄。
l 左外聯接(Left Outer Join):除了匹配2張表中相關聯的記錄外,還會匹配左表中剩余的記錄,右表中未匹配到的字段用NULL表示。
l 右外聯接(Right Outer Join):除了匹配2張表中相關聯的記錄外,還會匹配右表中剩余的記錄,左表中未匹配到的字段用NULL表示。
在判定左表和右表時,要根據表名出現在Outer Join的左右位置關系。
14. 如何在刪除主表記錄時,一並刪除從表相關聯的記錄?
如果兩張表存在主外鍵關系,那么在刪除主鍵表的記錄時,如果從表有相關聯的記錄,那么將導致刪除失敗。
在定義外鍵約束時,可以同時指定3種刪除策略:一是將從表記錄一並刪除(級聯刪除);二是將從表記錄外鍵字段設置為NULL;三是將從表記錄外鍵字段設置為默認值。
級聯刪除示例:
|
alter table 從表名
add constraint 外鍵名
foreign key(字段名) references 主表名(字段名)
on delete cascade
|
15. 什么是游標?
游標實際上是一種能從包括多條數據記錄的結果集中每次提取一條記錄進行處理的機制。
游標的使用步驟:
1. 定義游標:declare cursor 游標名稱 for select查詢語句 [for {readonly|update}]
2. 打開游標:open cursor
3. 從游標中操作數據:fetch... ... current of cursor
4. 關閉游標:close cursor
