《數據庫系統概念》第4章知識點總結
中級SQL
以下是幾個後面會用到的表
連接條件
on:作用與where類似,但也有不同
on條件:是在生成臨時表時用的條件,不管on條件是否爲真,都會返回表中記錄
where條件:是在生成臨時表之後,再對臨時表進行過濾的條件,條件不爲真的都過濾掉。
外連接
左外連接:以左表爲基準,只保留出現在左外連接運算之前的關係中的元組
右外連接:以右表爲基準,只保留出現在右外連接運算之後的關係中的元組
全外連接:保留出現在兩個關係中的元組
這個知識點我還不是很懂,等日後學了再單獨發一篇博出來
視圖
爲什麼要有視圖:出於安全考慮,我們不能讓用戶看到整個邏輯模型,可能需要向用戶隱藏特定的數據,所以我們會希望創建一個比邏輯模型更符合特定用戶直覺的個人化的關係集合。
視圖的定義
用create view 命令定義視圖
在SQL查詢中使用視圖
已存在視圖physics_fall_2009
物化視圖
如果用於定義視圖的實際關係改變,視圖也跟着修改。這樣的視圖稱爲物化視圖
視圖更新
包括更新、插入、刪除
當我們給一個視圖插入一個新的元組時,由於視圖隱藏了一些屬性,所以該插入語句中會缺少一些屬性,對於這種情況,存在兩種合理的解決方法來處理插入:
(1)拒絕插入,並向用戶返回一個錯誤信息
(2)繼續插入元組,用null補全缺少的屬性
不同的數據庫在這個問題上指定了不同的發那個發,請參考數據庫系統手冊以獲得詳細信息
一般來說,滿足以下所有條件的視圖被稱爲是可更新的:
(1)from子句中只有一個數據庫關係
(2)select子句中只包含關係的屬性名,不包含任何表達式、聚集或distinct聲明
(3)任何沒有出現在select子句中的屬性可以取控制;即沒有not null約束也不是主碼
(4)查詢中不含有group by或having子句
事務
由查詢和(或)更新語句的序列組成。當一條SQL語句被執行,就隱式地開始了一個事務
結束事務的兩個SQL語句
Commit work:提交當前事務,也就是將該事務所做的更新在數據庫中持久保存。在事務被提交後,一個新的事務自動開始。
Rollback work:回滾當前事務,即撤銷該事務中所有SQL語句對數據庫的更新。這樣,數據庫就恢復到執行該事務第一條語句之前的狀態。
完整性約束
完整性約束保證授權用戶對數據庫所做的修改不會破壞數據的一致性。
單個關係上的約束
not null:禁止空值
Unique(A1,A2,...,Am):屬性A1,A2,...,Am形成了一個候選碼;即在關係中沒有兩個元組能在所列出的屬性上取值相同。
check(<謂詞>):用check子句來保證屬性值滿足指定的條件。
參照完整性
references子句:顯示指定被參照關係的屬性列表
foreign key(dept_name) referencesdepartment
這個外碼聲明表示,在每個課程元組中指定的系名必須在department關係中存在。
斷言
一個斷言就是一個謂詞,它表達了我們希望數據庫總能滿足的一個條件。
SQL的數據類型與模式
SQL中的日期和時間類型
data:日曆日期,包括年(四位)、月和日
time:一天中的時間,包括小時、分和秒。可以用變量time(p)來表示秒的小數點後的位數
timestamp:date和time的組合。可以用變量timestamp(p)來表示秒的小數點後的數字位數(默認爲6)
cast e as t:將字符串e轉換成類型t(data、time、timestamp),e的格式必須正確
extract ( field from d ):從data或time值d中提取出單獨的域field(year、month、day、hour、minute、second)
current_data:返回當前日期
current_time:返回當前時間(帶有時區)
localtime:返回當前的本地時間(不帶時區)
時間戳(日期加上時間)由current_timestamp(帶有時區)以及localtimestamp(本地日期和時間,不帶時區)返回
默認值
用default定義
創建索引
create index studentID_index onstudent(ID);
上述語句在student關係的屬性ID上創建了一個名爲studentID_index的索引
在後面幾章中我們會詳細學習索引是如何實現的
大對象類型
clob:字符數據的大對象數據類型
blob:二進制數據的大對象數據類型
用戶定義的類型
SQL支持兩種形式的用戶定義數據類型:獨特類型和結構化數據類型。我們將在這裏介紹獨特類型
create type子句:定義新類型,不可聲明約束
create domain子句:定義一個域,可以聲明約束
drop type和alter type子句:用來刪除或修改以前創建過的類型
create table的擴展
create table like可以用來創建與現有的某個表的模式相同的表
模式、目錄與環境
不知如何總結,日後完善
授權
授權包括:授權讀取數據、授權插入新數據、授權更新數據、授權刪除數據
grant語句用於授予權限 revoke語句用於收回權限
角色
在數據庫中建立一個角色集,可以給角色授予權限,就和給每個用戶授權的方式完全一樣。每個數據庫用戶被授予一組他有權扮演的角色
創建一個角色:create role instructor
視圖的授權
模式的授權
只有模式的擁有者才能夠執行對模式的任何修改
references表示該權限
權限的轉移
默認方式下,被授予權限的用戶/角色無權把得到的權限再授予給另外的用戶/角色。如果我們在授權時允許接受者把得到的權限再傳遞給其他用戶,我們可以在相應的grant命令後面附加with grant option子句。
一個對象(關係/視圖/角色)的創建者擁有該對象上的所有權限,包括給其他用戶授權的權限
權限的收回
防止級聯收回
級聯收回:將restrict改爲cascade(一般爲默認的,所以也可以省去)
注:圖片均來自《數據庫系統概念》第6版——機械工業出版社