外來鍵的作用:
保持資料一致性,完整性,主要目的是控制儲存在外鍵表中的資料。 使兩張表形成關聯,外來鍵只能引用外表中的列的值!
例如:a b 兩個表
a表中存有客戶號,客戶名稱
b表中存有每個客戶的訂單
有了外來鍵後
你只能在確信b 表中沒有客戶x的訂單後,才可以在a表中刪除客戶x
建立外來鍵的前提: 本表的列必須與外來鍵型別相同(外來鍵必須是外表主鍵)。
指定主鍵關鍵字: foreign key(列名)
引用外來鍵關鍵字: references 《外來鍵表名》(外來鍵列名)
事件觸發限制: on delete和on update , 可設引數cascade(跟隨外來鍵改動), restrict(限制外表中的外來鍵改動),set null(設空值),set default(設預設值),[預設]no action
例如:outtable表 主鍵 id 型別 int
建立含有外來鍵的表:
create table temp(
id int,
name char(20),
foreign key(id) references outtable(id) on delete cascade on update cascade);
說明:把id列 設為外來鍵 參照外表outtable的id列 當外來鍵的值刪除 本表中對應的列篩除 當外來鍵的值改變 本表中對應的列值改變。
今天有朋友問我"外來鍵的作用是什麼"
當朋友問我外來鍵的作用是什麼時,我也愣了一下,平常都是在這麼用,還沒有真正的總結過,外分鍵的作用呢.下面,我總結了一下外來鍵的作用:
外來鍵 (fk) 是用於建立和加強兩個表資料之間的鏈結的一列或多列。通過將儲存表中主鍵值的一列或多列新增到另乙個表中,可建立兩個表之間的鏈結。這個列就成為第二個表的外來鍵。
foreign key 約束的主要目的是控制儲存在外鍵表中的資料,但它還可以控制對主鍵表中資料的修改。例如,如果在 publishers 表中刪除乙個出版商,而這個出版商的 id 在 titles 表中記錄書的資訊時使用了,則這兩個表之間關聯的完整性將被破壞,titles 表中該出版商的書籍因為與 publishers 表中的資料沒有鏈結而變得孤立了。foreign key 約束防止這種情況的發生。如果主鍵表中資料的更改使之與外來鍵表中資料的鏈結失效,則這種更改是不能實現的,從而確保了引用完整性。如果試圖刪除主鍵表中的行或更改主鍵值,而該主鍵值與另乙個表的 foreign key 約束值相關,則該操作不可實現。若要成功更改或刪除 foreign key 約束的行,可以先在外鍵表中刪除外來鍵資料或更改外來鍵資料,然後將外來鍵鏈結到不同的主鍵資料上去。
外來鍵是用來控制資料庫中資料的資料完整性的
就是當你對乙個表的資料進行操作
和他有關聯的乙個或更多表的資料能夠同時發生改變
這就是外來鍵的作用
[精] 談談外來鍵
外來鍵 (fk) 是用於建立和加強兩個表資料之間的鏈結的一列或多列。通過將儲存表中主鍵值的一列或多列新增到另乙個表中,可建立兩個表之間的鏈結。這個列就成為第二個表的外來鍵。
foreign key 約束的主要目的是控制儲存在外鍵表中的資料,但它還可以控制對主鍵表中資料的修改。例如,如果在 publishers 表中刪除乙個出版商,而這個出版商的 id 在 titles 表中記錄書的資訊時使用了,則這兩個表之間關聯的完整性將被破壞,titles 表中該出版商的書籍因為與 publishers 表中的資料沒有鏈結而變得孤立了。foreign key 約束防止這種情況的發生。如果主鍵表中資料的更改使之與外來鍵表中資料的鏈結失效,則這種更改是不能實現的,從而確保了引用完整性。如果試圖刪除主鍵表中的行或更改主鍵值,而該主鍵值與另乙個表的 foreign key 約束值相關,則該操作不可實現。若要成功更改或刪除 foreign key 約束的行,可以先在外鍵表中刪除外來鍵資料或更改外來鍵資料,然後將外來鍵鏈結到不同的主鍵資料上去。
外來鍵是用來控制資料庫中資料的資料完整性的
就是當你對乙個表的資料進行操作
和他有關聯的乙個或更多表的資料能夠同時發生改變
這就是外來鍵的作用
主鍵和外來鍵是把多個表組織為乙個有效的關聯式資料庫的粘合劑。主鍵和外來鍵的設計對物理資料庫的效能和可用性都有著決定性的影響。
必須將資料庫模式從理論上的邏輯設計轉換為實際的物理設計。而主鍵和外來鍵的結構是這個設計過程的癥結所在。一旦將所設計的資料庫用於了生產環境,就很難對這些鍵進行修改,所以在開發階段就設計好主鍵和外來鍵就是非常必要和值得的。
主鍵:關聯式資料庫依賴於主鍵---它是資料庫物理模式的基石。主鍵在物理層面上只有兩個用途:
1. 惟一地標識一行。
2. 作為乙個可以被外來鍵有效引用的物件。
基於以上這兩個用途,下面給出了我在設計物理層面的主鍵時所遵循的一些原則:
1. 主鍵應當是對使用者沒有意義的。如果使用者看到了乙個表示多對多關係的連線表中的資料,並抱怨它沒有什麼用處,那就證明它的主鍵設計地很好。
2. 主鍵應該是單列的,以便提高連線和篩選操作的效率。
注:使用復合鍵的人通常有兩個理由為自己開脫,而這兩個理由都是錯誤的。其一是主鍵應當具有實際意義,然而,讓主鍵具有意義只不過是給人為地破壞資料庫提供了方便。其二是利用這種方法可以在描述多對多關係的連線表中使用兩個外部鍵來作為主鍵,我也反對這種做法,理由是:復合主鍵常常導致不良的外來鍵,即當連線表成為另乙個從表的主表,而依據上面的第二種方法成為這個表主鍵的一部分,然,這個表又有可能再成為其它從表的主表,其主鍵又有可能成了其它從表主鍵的一部分,如此傳遞下去,越靠後的從表,其主鍵將會包含越多的列了。
3. 永遠也不要更新主鍵。實際上,因為主鍵除了惟一地標識一行之外,再沒有其他的用途了,所以也就沒有理由去對它更新。如果主鍵需要更新,則說明主鍵應對使用者無意義的原則被違反了。
注:這項原則對於那些經常需要在資料轉換或多資料庫合併時進行資料整理的資料並不適用。
4. 主鍵不應包含動態變化的資料,如時間戳、建立時間列、修改時間列等。
5. 主鍵應當有計算機自動生成。如果由人來對主鍵的建立進行干預,就會使它帶有除了惟一標識一行以外的意義。一旦越過這個界限,就可能產生認為修改主鍵的動機,這樣,這種系統用來鏈結記錄行、管理記錄行的關鍵手段就會落入不了解資料庫設計的人的手中。
外來鍵是資料庫一級的乙個完整性約束,就是資料庫基礎理論書中所說的「參照完整性」的資料庫實現方式。
外來鍵屬性當然是可以去掉的,如果你不想再用這種約束,對程式設計當然不會有什麼影響,但相應的錄入資料的時候就不對錄入的資料進行「參照完整性」檢查了。
例如有兩個表
a(a,b) :a為主鍵,b為外來鍵(來自於b.b)
b(b,c,d) :b為主鍵
如果我把字段b的外來鍵屬性去掉,對程式設計沒什麼影響。
如上面,a中的b要麼為空,要麼是在b的b中存在的值,有外來鍵的時候,資料庫會自動幫你檢查a的b是否在b的b中存在。
1、外建表達的是參照完整性:這是資料固有的,與程式無關。因此,應該交給dbms來做。
2、使用外建,簡單直觀,可以直接在資料模型中體現,無論是設計、維護等回有很大的好處,特別是對於分析現有的資料庫的好處時非常明顯的--前不久我分析了乙個企業現有的資料庫,裡面的參照完整性約束有的是外來鍵描述,有的是用觸發器實現,感覺很明顯。當然,文件裡可能有,但是也可能不全,但是外來鍵就非常明顯和直觀。
3、既然我們可以用觸發器或程式完成的這個工作(指參照完整性約束),dbms已經提供了手段,為什麼我們要自己去做?而且我們做的應該說沒有rdbms做得好。實際上,早期的rdbms並沒有外來鍵,現在都有了,我認為資料庫廠商增加這個功能是有道理的。從這個角度來說,外來鍵更方便。
4、關於方便,根據我帶專案的情況來看,程式設計師確實有反映,主要是在除錯時輸入資料麻煩:如果資料可以違反參照完整性,那麼就是說參照完整性本身就不對名譽業務衝突,此時也不應該用觸發**程式實現;否則,說明資料是錯誤的,根本就不應該進入資料庫!而且,這也應該是測試系統的乙個內容:阻止非法資料。實際上,前台程式應該對這種提交失敗做出處理。資料是企業的而非程式的,儲程式要盡量與資料分離,反之亦然。
最後說一下,建鍵幾個原則:
1、 為關聯字段建立外來鍵。
2、 所有的鍵都必須唯一。
3、避免使用復合鍵。
4、外來鍵總是關聯唯一的鍵字段。
外來鍵的作用?
外來鍵是資料庫一級的乙個完整性約束,就是資料庫基礎理論書中所說的「參照完整性」的資料庫實現方式。
外來鍵屬性當然是可以去掉的,如果你不想再用這種約束,對程式設計當然不會有什麼影響,但相應的錄入資料的時候就不對錄入的資料進行「參照完整性」檢查了。
例如有兩個表
a(a,b) :a為主鍵,b為外來鍵(來自於b.b)
b(b,c,d) :b為主鍵
如果我把字段b的外來鍵屬性去掉,對程式設計沒什麼影響。
如上面,a中的b要麼為空,要麼是在b的b中存在的值,有外來鍵的時候,資料庫會自動幫你檢查a的b是否在b的b中存在。
1、外建表達的是參照完整性:這是資料固有的,與程式無關。因此,應該交給dbms來做。
2、使用外建,簡單直觀,可以直接在資料模型中體現,無論是設計、維護等回有很大的好處,特別是對於分析現有的資料庫的好處時非常明顯的--前不久我分析了乙個企業現有的資料庫,裡面的參照完整性約束有的是外來鍵描述,有的是用觸發器實現,感覺很明顯。當然,文件裡可能有,但是也可能不全,但是外來鍵就非常明顯和直觀。
3、既然我們可以用觸發器或程式完成的這個工作(指參照完整性約束),dbms已經提供了手段,為什麼我們要自己去做?而且我們做的應該說沒有rdbms做得好。實際上,早期的rdbms並沒有外來鍵,現在都有了,我認為資料庫廠商增加這個功能是有道理的。從這個角度來說,外來鍵更方便。
4、關於方便,根據我帶專案的情況來看,程式設計師確實有反映,主要是在除錯時輸入資料麻煩:如果資料可以違反參照完整性,那麼就是說參照完整性本身就不對名譽業務衝突,此時也不應該用觸發**程式實現;否則,說明資料是錯誤的,根本就不應該進入資料庫!而且,這也應該是測試系統的乙個內容:阻止非法資料。實際上,前台程式應該對這種提交失敗做出處理。資料是企業的而非程式的,儲程式要盡量與資料分離,反之亦然。
最後說一下,建鍵幾個原則:
1、 為關聯字段建立外來鍵。
2、 所有的鍵都必須唯一。
3、避免使用復合鍵。
4、外來鍵總是關聯唯一的鍵字段。
mysql外來鍵的作用
mysql外來鍵的作用。最近自學資料庫mysql,然後有個疑問,一直不得其解,查詢了相關資料,最後還是沒有解決。關於外來鍵,我有自己的一些理解,但是不曉得是否正確,舉個例子來表達我的看法 假如現在需要建立乙個表,乙個什麼樣的表呢?乙個班級的學生個人資訊表 所以在設計的時候,就給表1新增乙個外來鍵,這...
mysql外來鍵作用
一 如果一張表中有乙個非主鍵的字段指向了別一張表中的主鍵,就將該字段叫做外來鍵。一張表中可以有多個外來鍵。外來鍵的預設作用有兩點 1.對子表 外來鍵所在的表 的作用 子表在進行寫操作的時候,如果外來鍵字段在父表中找不到對應的匹配,操作就會失敗。2.對父表的作用 對父表的主鍵字段進行刪和改時,如果對應...
mysql的外來鍵foreign key作用
目錄 什麼是外來鍵 建立外來鍵約束 create table 操作外來鍵示例 alter table 操作外來鍵示例 外來鍵約束的作用 使用外來鍵的優缺點 使用外檢約束條件 測試下外來鍵的作用 未指定事件觸發限制預設為restrict時 觸發限制預設為cascade時 乙個表中的 foreign k...