第1節 視圖
- 視圖采用create view語句定義,
- 可以是任何一個SQL語句。
- 無實際資料的’虛表’,有利于資料一緻性!
- 視圖上可以在定義新的視圖!
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcsQXYtJ3bm9CXldWYtlWPzNXZj9mcw1ycz9WL49jbC5WY11ESONTTY90d4ckW31kahdHat5ENOd0Y0wWba5mRUV2c4d1UhhmeVNTQE1kdVJjW5Z0RiZHNykVdjdlYwZUbiBnTuxEeF1GZwkTeMZTTINGMShUYvwlbj5yZtlmbkN3YuQnclZnbvN2Ztl2Lc9CX6MHc0RHaiojIsJye.jpg)
create view faculty as
select ID, name, dept_name
from instructor ;
- 可以在任何QL語句中像表一樣的被使用!
- 增強查詢能力且友善(使用者/程式員)使用!
- 還可以提供資料通路安全控制(隐藏資料)!
- 作為外模式(1級映射)有利于應用獨立性!
第2節 完整性限制
2.1 完整性限制
2.1.1 鍵完整性限制(主碼/主鍵)
- 關系(模式)必需有一個主碼,來區分不同元組!
- SQL采用primary key…來定義!
2.1.2 參照完整性限制(外碼/外鍵)
- 用另一關系的主碼,來限制屬性取值的有效性!
- SQL采用foreign key … references …來定義!
2.1.3 其它資料完整性限制
2.2 外鍵限制方式
2.3 斷言
例子:限制要求:student每個元組的tot_cred(學生的總學分)取值應等于該生所修完課程的學分總和(關系takes∞course的credits)
第3節 授權
3.1 表(關系)上的授權
SQL如何限制使用者對表中資料的合法通路?
通過授權!隻有授權使用者才能檢視(/插入/修改/删除)相關表中的資料。注:表的建立者, 自然擁有表上的一切權限.
3.2 視圖上的授權
- 在表instructor上建立一個視圖geo_instructor
create view geo_instructor as
(select *
from instructor
where dept_name='Geology');
- 将視圖上的檢視權授予一個角色geo_staff
- 如果該使用者在instructor上沒有獲得select授權,則他仍然看不到資料!(注:視圖上的update權限也類似)
- 使用者可以定義函數與過程(p.83,&5.2),并可對其他使用者授予execute執行權。
- 注:
- 視圖的建立者,自然擁有該視圖上的所有權限!
- 函數與過程的建立者,自然擁有其上所有權限!
- 從SQL2003标準開始,允許在定義函數和過程時指定sql security invoker,執行時與調用者相同的權限下運作!
3.3 授權圖(p84)
指定權限從一個使用者到另一個使用者的傳遞可以表示為授權圖。該圖中的頂點是使用者。
作用:
- 描述在一張表上某種授權的目前狀态,便于系統動态管理授權;
- 當DBA或具有權限的使用者(樹上節點)進行授權時,樹擴充(生長);
- 當DBA或具有權限的使用者(樹上節點)回收權限時,樹收縮(枯萎);
使用者具有權限的充分必要條件是:
當且僅當存在從授權圖的根(即代表資料庫管理者的頂點)到代表該使用者頂點的路徑。
第4節 SQL存儲過程
4.1 SQL函數
SQL除了提供一些常用的内建函數(聚集、日期、字元串轉換等)外,可編寫存儲過程(業務邏輯)并存于庫中, 可在SQL/應用代碼中調用!
4.2 SQL過程
4.3 外部語言過程
- 外部語言過程:SQL允許用程式語言(Java,C#,C,C++)來定義函數或過程,
- 運作效率要高于SQL中定義的函數,用于完成無法在SQL中執行的計算。
第5節 觸發器
觸發器是一條語句,當對資料庫作修改時,它自動被系統執行。要設定觸發器機制,必須滿足兩個要求:
- 指明什麼條件下執行觸發器。它被分解為一個引起觸發器被檢測的事件和一個觸發器執行必須滿足的條件
- 指明觸發器執行時的動作
對觸發器的需求
觸發器可以用來實作未被SQL限制機制指定的某些完整性限制。它還是一種非常有用的機制,用來當滿足特定條件時對使用者發警報或自動開始執行某項任務。觸發器還可用于複制或備份資料庫。