圖A 在Books和Publisher表之間啟用引用完整性
在兩個表之間啟用了引用完整性之后,數據輸入將受到更多的限制:
不可在Books.PublisherFK中輸入新的外鍵值,除非首先在Publishers.Publisher中將新值作為主鍵值輸入。
如果Books.PublisherFK中存在一個匹配的值(外鍵),那么不能在Publishers.Publisher中更改一個值(主鍵)。
Books.PublisherFK中存在一個匹配的值(外鍵),那么不能從Publishers.Publisher中刪除一個值(主鍵)。
輸入、刪除和更改數據時,如果違反了引用完整性,會發生什么呢?下面以Microsoft Access為例來實際體驗一下。首先打開Books表,然后輸入Nee Nee's Truck的記錄,如圖B所示。保存記錄時會產生一個錯誤,因為RabbitPress在Publishers表中不是一個主鍵值。必須先在Publishers表中為RabbitPress輸入一條記錄,否則引用完整性不認為RabbitPress是一個外鍵值。

圖B 系統拒絕RabbitPress成為一個外鍵
接著試驗一下修改主鍵值。請打開Publishers表,選擇Apress記錄(或者Que及Sybex),然后試著刪除記錄。這樣也會出錯,如圖C所示。系統不允許你刪除記錄,因為Books表包含匹配的外鍵值。但可以刪除O'Reilly的記錄,因為Books表中沒有任何記錄將O'Reilly作為外鍵使用。

圖C 不能刪除Apress記錄
如果將Apress修改成RabbitPress,會再次出現上述錯誤。記住,只要在相關的表中存在匹配的外鍵值,那么主鍵也是不能修改的。相反,O'Reilly就能修改成RabbitPress。