一、實(shí)體完整性
定義實(shí)體完整性:
1.在CREATE TABLE中使用PRIMARY KEY定義(列級和表級皆可)
2.實(shí)體完整性的檢查和違約處理(使用PRIMARY KEY定義主碼后,主碼值唯一且值不為空)
參照完整性(外碼):FOREIGN KEY? (<列名>) REFERENCES <表名>(<列名>) [ON <操作> [違約處理策略]] [,...]
1.在CREATE TABLE中使用FOREIGN KEY定義外碼,使用REFERENCES(<表名>)指明參照表
2.違約處理策略有拒絕執(zhí)行(NO ACTION)(默認(rèn))、級聯(lián)操作(CASCADE)、設(shè)置為空值(SET NULL)
--拒絕:不允許執(zhí)行該操作
--級聯(lián)操作:當(dāng)刪除或修改被參照表的一個元組導(dǎo)致與參照表的信息不一致時(shí),刪除或者修改參照表中的所有導(dǎo)致不一致的元組
--設(shè)置為空值:當(dāng)刪除或修改被參照表的一個元組導(dǎo)致與參照表的信息不一致時(shí),將參照表中的所有導(dǎo)致不一致的元組的對應(yīng)屬性設(shè)置為空值
用戶定義完整性:
屬性上的約束條件:
--列的約束條件的定義:在定義列時(shí)對定義屬性的限制:列值非空(NOT NULL)、列值唯一(UNIQUE)、使用約束(CHECK(<條件表達(dá)式>))
--列上的約束條件的檢查和違約處理:關(guān)系數(shù)據(jù)庫管理系統(tǒng)檢查,違約則拒絕執(zhí)行
元組上的約束條件:
1.元組上的約束條件的定義:表級CHECK(<條件表達(dá)式>)
2.元組上約束條件的檢查和違約處理:違約則拒絕操作
完整性約束命名子句
1.完整性約束命名子句:CONSTRAINT <完整性約束條件名> <完整性約束條件>,作列級、表級皆可
2.修改表中的完整性約束限制:ALTER TABLE <表名>
--ADD CONSTRAINT <約束名> <完整性約束條件表達(dá)式>
--DROP CONSTRAINT <約束名>
斷言(應(yīng)用于多表的約束,表外獨(dú)立創(chuàng)建,違約操作將被拒絕執(zhí)行,開銷大,一般不用)
1.創(chuàng)建斷言:CREATE ASSERTION <斷言名> CHECK <約束條件表達(dá)式>
2.刪除斷言:DROP ASSERTION <斷言名>
觸發(fā)器
1.定義觸發(fā)器:
CREATE TRIGGER <觸發(fā)器名>
{BEFORE|AFTER} <觸發(fā)事件> ON <表名>
REFERENING NEW|OLD ROW AS<變量>
FOR EACH{ROW|STATEMENT}
[WHEN <觸發(fā)條件>] <觸發(fā)動作體>?
--只有表的擁有者才可以在表上創(chuàng)建觸發(fā)器
--表上的觸發(fā)器是有限的
--同一外模式下觸發(fā)器名必須唯一,觸發(fā)器名必須和表名在同一外模式下
--觸發(fā)器只能定義在基本表上,不能定義在視圖上
--觸發(fā)事件有UPDATE DELETE INSERT
--觸發(fā)器類型,行級:FOR EACH ROW,語句級:FOR EACH STATEMENT
--觸發(fā)動作體可以是一個匿名的PL/SQL過程快,也可以是對已創(chuàng)建存儲過程的調(diào)用
--觸發(fā)動作體執(zhí)行失敗,激活觸發(fā)器的事件停止執(zhí)行
--行級觸發(fā)器可以使用NEW或OLD引用UPDATE、INSERT事件之前的舊值,語句級不行插進(jìn)去的是ROW,沒插的是
2.刪除觸發(fā)器·
DROP TRIGGER <觸發(fā)器名> ON <表名>