1. 程式人生 > >數據庫完整性 ch.5

數據庫完整性 ch.5

end 針對 foreign 語句 gre ade char 使用 組合

數據庫的完整性 是指 數據的正確性(correctness) 和 相容性 (compat-ability)

5.1 實體完整性

定義

對單屬性碼的說明有兩種方法,一種是定義為表約束條件,一種是定義為列級約束條件

多屬性嗎只能定義成表級約束條件

實體完整性檢查和違約處理

檢查主碼是否唯1 , 檢查主碼的各個屬性是否非為空。

一般的數據庫都會在主碼上建一個索引

5.2 參照完整性

5.2.1 參照完整性檢查 和 違約處理

如果要修改 參照表違約了 直接拒絕
如果修改被參照表違約 那麽根據用戶的設置進行處理

5.3 用戶定義的完整性

屬性上的約束條件

非空
唯一
檢查列值是否滿足一個條件 check 語句

不滿足就拒絕

元組上的約束條件

check 語句可以設置針對元組的約束條件

5.4 完整性約束命名字句

1完整性約束命名字句名

constraint <完整性約束名> < 完整性約束條件>

完整新約束條件包括 unique not null primary key foreign key check 等

方便進行完整性的修改 刪除 添加等

修改:
alter table
drop constraint C4;

alter table Student drop contraint C4;
alter tabele student
add constraint C1 check(Son between 2313 and 23434 )
先刪除再添加新的約束

5.5 域的完整性限制

建立一個域 並且聲明取值範圍

create domin GrenderDomin char(2) check(value in ( ‘asas‘ ,‘sdsd‘) ;

Ssex 的說明就可以簡寫為
Ssex GerndeDomin

create domin GenderDomin char(2)
constraint GD check(value in ("nan","nv"))

alter domin GenderDomin drop constraint GD ;

alter domin GenderDomin add constraint GDD check(value in (1,0))

5.6 斷言

可以使用斷言機制, 使得任何操作違反了斷言都會被拒絕執行
create assertion <斷言名>

check 字句與 where 語句類似

create asssertion asse_sc_cnum2
check (60>all(select * from *** where **))

5.7 觸發器

觸發器又叫做
事件條件動作規則 event - conditon -action
當特定的事件發生的時候 , 對 規則的條件進行檢查

觸發器的格式是
create trigger <觸發器名>
{before | after } <觸發事件> on < 表名>
reference new|old row as <變量>
for each {row |statement }
[when <觸發條件>] <出發動作提>

1 只有表的擁有著可以創建觸發器,並且一個表上只有一定數量的觸發器

2 觸發器名必須是唯一的,在統一模式下

3 觸發器必須定義在基本表上(視圖是不被允許的

4觸發事件可以是 insert update delete delete 也可以是這幾個事件的組合 比如 insert or update 還可以是 update of (《觸發列》,...) 指明修改那些列的時候觸發

5觸發器類型 : 可以分為 行級觸發器fir each row 語句級觸發器 for each statement
一個一次修改1000 行的操作 , 語句級觸發器執行1 次, 行級觸發器執行1000次
6 觸發條件:觸發條件為真的時候才會執行觸發器的內容

7 觸發動作體
可以是 匿名的PL/sql 過程快
也可以是調用存儲過程

如果是行級觸發器,那麽可以使用 new old 引用update insert 事件之後的新址和 updaye delete 中的舊值
如果是語句級觸發器就不行

crate trigger SC_U after update
reference
newrow as newtuple
oldrow as oldtuple
for each row
when(newtupel.grde>oldtuple.grade1.1)
insert into
**
values("sdasd,"‘sda)

語句級觸發器又 newtable 和 oldtable 可以引用

5.7.2 激活觸發器

執行觸發器的時候遵循以下順序

執行before 觸發器
執行激活觸發器的sql 語句
執行after 觸發器

多個before after 觸發器 誰先創建誰執行。

5.7.3 刪除觸發器

drop trigger <觸發器名> on <表名>

數據庫完整性 ch.5