一:首先是外來鍵的定義
如果乙個欄位x在一張表(表一)中是主關鍵字,而在另外一張表(表二)中不是主關鍵字,則字段x稱為表二的外來鍵;換句話說如果關係模式r1中的某屬性集不是自己的主鍵,而是關係模式r2的主鍵,則該屬性集稱為是關係模式r1的外來鍵。
二:主鍵表和外鍵表的理解
(1)以公共關鍵字作主鍵的表為主鍵表(父表,主表)
(2)以公共關鍵字作外來鍵的表為外來鍵表(從表,外表)
舉個例子:
這裡有2張表(student和depart)學生表和院系表,這裡的字段departnum就是學生表的外來鍵,這裡的外來鍵表是學生表,主鍵表是院系表。
四:外來鍵的作用
各種書籍和網上的資料大多都是抽象空洞的解釋:保證資料的完整性和一致性。
個人對此的理解與接下來的外來鍵約束一起講。
五:外來鍵約束
mysql 下,外來鍵設定:
on delete 規則:
1、cascade:級聯
(1)所謂的級聯刪除,就是刪除主鍵表的同時,外來鍵表同時刪除。
(2)以上面的例子將就是,假如院系表中的某個院系被刪除了,那麼在學生表中要想查詢這個被刪除的院系號所對應的院資訊就會報錯,因為已經不存在這個系了,所以,刪除院系表(主鍵表)時必須刪除其他與之關聯的表,這裡就說明了外來鍵的作用,保持資料的一致性、完整性。當然反過來講,你刪除學生表中的記錄,並不影響院系表中的資料,你查詢院系號也能正確查詢。所以刪除外來鍵表中的資料並不影響主鍵表。
2、no action(非活動,預設)、restrict:約束/限制
當取值為no action或者restrict時,則當在主鍵表中刪除對應記錄時,首先檢查該記錄是否有對應外來鍵,如果有則不允許刪除。(即外來鍵表約束主鍵表)
3、set null
當取值為set null時,則當在主鍵表中刪除對應記錄時,首先檢查該記錄是否有對應外來鍵,如果有則設定子表中該外鍵值為null(,一樣是外來鍵表約束主鍵表,不過這就要求該外來鍵允許取null)。
no action和restrict的區別:只有在及個別的情況下會導致區別,前者是在其他約束的動作之後執行,後者具有最高的優先權執行。
六.實際應用
物件模型中的資料如下:
package org.model;這裡設計物件模型時的屬性並不是設計成departnum這個外來鍵,而是整個depart物件,這樣做的好處是在查詢時,就不用通過外來鍵或者連線查詢再多查詢一次public class student
public string getstuname()
public depart getdepart()
public void setstunum(string stunum)
public void setstuname(string stuname)
public void setdepart(depart depart)
}
若要通過外來鍵查詢:
query query=session.createquery("from student as stud where stud.depart.departnum=:num");query.setstring("num","890");
資料庫外來鍵理解
近期自學資料庫mysql。然後有個疑問。一直不得其解。查詢了相關資料。最後還是沒有解決。我的疑問是 使用外來鍵約束 然後我對 外來鍵 這個詞不是非常理解。查詢相關資料都是講一些術語。說外來鍵的主要作用是 保持資料的一致性 完整性。聽得我是一頭霧水。關於外來鍵。我有自己的一些理解,可是不曉得是否正確,...
主鍵和外來鍵舉例 資料庫 主鍵和外來鍵及其約束
1 什麼是主鍵 在一張表中,用來唯一標識一條記錄的字段集,叫做主關鍵字或者主關鍵碼,簡稱主鍵 或主碼 這裡說 欄位集 是因為主鍵可能用乙個字段或者多個欄位來表示。舉例來看 學生表 學號,姓名,性別,專業編號 這裡學號是主鍵,乙個學號id就可以唯一標識乙個學生的資訊。另乙個表 學生選課表 學號,課程號...
MySQL資料庫(五)外來鍵約束
一 foreign key 的作用和要求 找到my.ini檔案,開啟,找到defult stroage engine innodb,檢視引擎是否是innodb,如下圖 案例 一 建立父類表和子類表,資料型別不一致導致150錯誤 mysql create table sheng id smallint...