資料庫完整性 5

2021-10-23 21:07:47 字數 3897 閱讀 6096

資料的相容性

資料的完整性和安全性是不同的概念

資料的安全性

完整性是阻止合法使用者通過合法操作向資料庫中加入不正確的資料

安全性防範的是非法使用者和非法操作訪問資料庫中的正確資料

為維護資料庫的完整性,資料庫管理系統必須

提供定義完整性約束條件的機制

提供完整性檢查機制

違約處理

關係模型的實體完整性

create table 中用 primary key定義

對多個屬性構成的碼只有一種說明方法

【eg.5.1】將student表中的sno屬性定義為碼

/*在列級定義主碼*/

create

table student

( sno char(9

)primary

key,

sname char(20

)not

null

, s*** char(2

),sage smallint

, sdept char(20

));/*在表級定義主碼*/

create

table student

( sno char(9

),sname char(20

)not

null

, s*** char(2

),sage smallint

, sdept char(20

), primary

key(sno)

);

【eg.5.2】將sc表中的sno,cno屬性定義為碼

create

table sc

( sno char(9

)not

null

, cno char(4

)not

null

, grade smallint

,primary

key(sno,cno)

/* 只能在表級定義主碼*/

);

rdbms完整性控制機制的三個組成部分

【eg.5.3】關係sc中(sno,cno)時主碼,sno,cno分別參照student表中的主碼和course表中的主碼

create table sc

( sno char(9) not null,

cno char(4) not null,

grade smallint,

primary key(sno,cno), /* 只能在表級定義主碼*/

foreign key (sno) references student(sno), /*在表級定義參照完整性*/

froeign key (cno) references course(cno) /*在表級定義參照完整性*/

);

屬性上的約束條件檢查和違約處理

完整性約束命名子句

constraint《完整性約束條件名》《完整性約束條件》

【eg. 5.10】建立學生登記表student,要求學號在90000_99999之間

姓名不能取空值,年齡小於30,性別只能取男女

creaate table

( sno numeric(6

)constraint c1 check

(sno between

90000

and99999),

sname char(10

)constraint c2 not

null

, sage numeric(3

) c3 check

(sage<30)

, s*** char(2

)constraint c4 check

(s*** in

('男'

,'女')),

constraint studentkey primary

key(sno)

);

修改表中的完整性限制

【eg. 5.12】去掉student中對性別的限制

alter

table student

drop constraintc4;

【eg. 5.13】修改student中的約束條件,要求學生改為在90000——999999之間,年齡由小於30改為小於40

/*可以先刪除原來的約束條件,再增加新的約束條件*/

alter

table student

drop

constraint c1;

alter

table student

addconstraint c1 check

(sno between

900000

and999999),

alter

table student

drop

constraint c3 ;

alter

table student

addconstraint c3 check

(sage<40)

;

語法格式

create assertion 《斷言名》【eg. 5.18】限制資料庫課程最多60名學生選修

create assertion asse_sc_db_num

check(60

>=

(select

count(*

)from cuorse,sc

where sc.cno=course.cno and

course.name=

'資料庫'

));

觸發時機:向sc表中插入元組

違約反應:拒絕執行

【eg. 5.19】限制每一門課程最多60名學生選修

create assertion asse_sc_cnum1

check(60

>=

(select

count(*

)from sc

gruop by cno)

);

【eg. 5.20】限制每個學期每一門課最多60名學生選修

/*首先需要修改sc表的模式,增加乙個『學期』(term)屬性*/

alter

table sc add term date

;/*然後定義斷言*/

create assertion asse_sc_cnum2

check(60

>=

(select

count(*

)from sc

group

by cno,term)

);

刪除斷言的語句格式

drop assertion 《斷言名》;

create trigger語法格式

create trigger《觸發器名》

《觸發事件》on《表名》

referencing new|old rows as《變數》

for each

[where 《觸發條件》]《觸發動作體》

三要素

觸發事件

觸發條件

觸發動作

乙個資料表上可能定義了多個觸發器,遵循如下的執行順序

執行該錶上的before觸發器

啟用觸發器的sql語句

執行該錶上的after觸發器

5 資料庫完整性

完整性指資料的正確性和相容性 完整性 為了防止資料庫中存在不符合語義的資料,不正確的資料 安全性 保護資料庫惡意破會和非法訪問 維護完整性,資料庫系統必須實現 如下功能 提供定義完整性的約束條件機制 由sql資料定義語言實現,作為資料庫模式的一部分存入資料字典 完整性檢查的方法 在insert up...

資料庫完整性

完整性約束條件 實體完整性給出了主鍵的取值的最低約束條件 規則是 主鍵的各個屬性都不能為空。參照完整性給出了在關係之間建立正確的聯絡的約束條件 規則是 外來鍵或者取空值 此時要求外來鍵的各個屬性均為空值 或者等於被參照關係中的主鍵的某個值。使用者自定義完整性 關係數控應用系統中的關係往往還應該滿足一...

資料庫完整性

資料的完整性和安全性 資料庫的完整性和安全性是兩個既有聯絡又不盡相同的概念。資料的完整性是為了防止資料庫中存在不符合語義的資料,也就是防止資料庫中存在不正確的資料。資料的安全性是保護資料庫防止惡意破壞和非法訪問。完整性檢查和控制的防範物件是不合語義的 不正確的資料,防止它們進入資料庫。安全性控制的方...