資料庫的完整性是指資料庫的任何狀態變化都能反映真實存在的客觀世界的合理狀態,資料庫中的資料應始終保持正確且合理的狀態。即資料正確性和相容性。
1.實體完整性約束
可以用primary key 定義乙個表的主碼,這就可以實現實體完整性,即主鍵不為空且唯一。在定義了實體完整性後,當插入或修改操作使得表中屬性的取值違反實體完整性約束(即主碼值不唯一或主碼的各個屬性中有乙個為空)時,系統一般採用拒絕執行方式處理
2.參照完整性約束
可以用foreign key 定義乙個表的外碼,用references指明外碼參照哪張表的主碼,這樣就實現了參照完整性。在定義參照完整性約束時,參照表的外碼的列數與被參照錶主碼的列數必須相同,並且對應列的資料型別也必須相同,但是外碼的列名與被參照表的主碼列名不必相同。
違約的處理方式
(1)拒絕(no action)執行,即不允許執行該操作,一般為預設違約處理方式。
(2)級聯(cascade)操作,表示當刪除或修改被參照表的元組造成參照表中某些元組的外碼違反了參照完整性約束,則系統會自動刪除或修改參照表中所有違反參照表中的元組
(3)設定為空(set null),表示當刪除或修改被參照表的乙個元組造成了參照表某些元組的外碼違反了參照完整性約束,則系統會自動將參照表中所有違反參照完整性約束的元組的外碼設定為空值。
3.使用者自定義完整性約束
常見的是not null非空約束,check約束,unique約束等。
在建立表的時候有兩種建立約束的方法,一種是直接在資料型別後面寫明約束,一種是在最後面寫約束。
例如建立乙個主鍵約束,
create table test( eno int primary key name varchar(10) )
create table test( eno int, name varchar(10) constraint pk_eno primary key (eno) )
若是表已經建好了,需要新增或者刪除約束,需要用到alter table 語句來操作。
例如增加乙個check 約束,職稱不是教授的教師必須在60歲退休。
alter table t add constraint ck_t check(title != '教授' and tage<60 or title ='教授')
這裡注意下,not null 約束不是用add constraint 語句了,用alter table alter column 了。
alter table test alter column eno int not null
刪除約束的語句
alter table t drop constraint ck_t
資料庫 完整性約束
問題描述 現有乙個商店的資料庫 shopping 記錄客戶及其購物情況,由以下四個關係組成 a 客戶表customer 儲存客戶資訊,包括客戶號customerid 客戶姓名cname 位址address 電子郵件email 性別gender 身份證號cardid 號碼telcode。b 商品表go...
資料庫 資料完整性約束
資料完整性 儲存在資料庫中的所有資料值均正確的狀態。完整性約束 防止不符合規範的資料進入資料庫,在使用者對資料進行插入 修改 刪除等操作時,dbms自動按照一定的約束條件對資料進行監測,使不符合規範的資料不能進入資料庫,以確保資料庫中儲存的資料正確 有效 相容。1.實體完整性 實體完整性是對主鍵的約...
資料庫概論 完整性約束
一 資料庫的完整性約束 資料的正確性和相容性 注 資料的完整性和安全性是兩個不同的概念。資料庫的完整性是為了防止資料庫中含有不符合語義的的資料,也就是防止資料庫中含有不正確的資料。資料庫中的安全性是為了保護資料庫防止惡意的破壞和非法的訪問。二 為維護資料庫的完整性,dbmx必須能夠 1 提供定義完整...