完整性
完整性與安全性的異同點
完整性:防止資料庫中存在不符合語意的資料,也就是防止資料庫中存在不正確的資料,防范物件:不合語意的、不正確的資料,
安全性:保護資料庫防止惡意的破壞和非法的存取,防范物件:非法用戶和非法操作,
物體完整性規則
若屬性(一個或者一組)A是基本關系的主屬性,則A不能取空值,在關系型資料庫里的體現就是將資料表的某一個候選碼設定為主鍵,PRIMARY KEY.
單屬性構成碼有兩種方式:
- 成為列級約束條件
- 成為表級約束條件
約束條件的范圍由碼的定義位置確定,如果在創建表的最后確定那么就是表級約束條件,如果在定義列的同時設定為碼那么就是列級,
而對于多個屬性一起構成碼的,只能作為表級的約束條件,
物體完整性的檢查和違約處理
插入或對主碼列進行更新操作時,DBMS按照物體完整性規則自動進行檢查,包括:
- 檢查主碼的各個屬性是否為空,只要有一個為空就拒絕插入或修改;
- 檢查主碼值是否唯一,如果不唯一則拒絕插入或修改
檢查主碼是否唯一的一種辦法就是全表掃描,并一一比較是否相同,
或者為主碼創建索引,提高掃描的效率,
參照完整性
指的是關系模型中參照其他的表的屬性,構成了當前表的參照完整性,在關系資料庫中的體現就是將某一個屬性定義為外鍵 FOREIGN KEY ... REFERENCE...
參照完整性的檢查和違約處理
- 拒絕(NO ACTION)執行
默認策略 - 級聯(CASCADE)操作
如從Student表中洗掉Sno的值為201215121,則從sc表中級連洗掉 SC.Sno=201215121的所有元組 - 設定為空值(SET-NULL)
對于參照完整性,除了應該定義外碼,還應定義外碼列是否允許空值,如:學生 (學號, 姓名, 年齡,專業號 ) 專業(專業號, 專業名)
如果專業表中某個元組被洗掉,則可以把學生中的外碼設定為空值

用戶自定義完整性
針對用戶的特定應用而設定的完整性要求,例如性別只能為男,女,年齡必須為正數等,
用戶定義的完整性分為
- 屬性上的完整性定義
- 列值唯一
- 列值不為NULL
- 用CHECK短語指定列值應該滿足的條件
- 元組上的完整性定義
- 在CREATE TABLE時可以用CHECK短語定義元組上的約束條件,即元組級的限制
- 同屬性值限制相比,元組級的限制可以設定不同屬性之間的取值的相互約束條件,即可以在同一個元組內進行不同屬性的判斷處理,
完整性約束命名子句
QL還在Creat table陳述句中提供了完整性約束命名子句,用來對完整性約束條件命名,從而可以靈活地增加、洗掉一個完整性約束條件
CONSTRAINT <完整性約束條件名>[ NOT NULL | UNIQUE | PRIMARY KEY短語| FOREIGN KEY短語 | CHECK短語 ]
斷言
斷言創建陳述句
CREATE ASSERTION <斷言名> <CHECK 子句>
可以定義涉及到多個表的復雜條件判斷陳述句,資料庫中所有涉及到斷言中定義的操作都會觸發斷言判斷,如果斷言判斷結果不為真,就會拒絕執行,
觸發器
在指定的操作之前,或之后執行的一段SQL陳述句,
- Before insert, update...
- After insert, update...
資料庫的完整性是為了保證資料庫中存盤的資料是正確的DBMS完整性實作的機制,
- 完整性約束定義機制
- 完整性檢查機制
- 違背完整性約束條件時RDBMS應采取的動作
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/248952.html
標籤:MySQL
上一篇:010_MySQL
下一篇:資料庫概論 (七)恢復技術
