mysql外來鍵的作用

2021-12-30 03:30:05 字數 1354 閱讀 3487

mysql外來鍵的作用。最近自學資料庫mysql,然後有個疑問,一直不得其解,查詢了相關資料,最後還是沒有解決。

關於外來鍵,我有自己的一些理解,但是不曉得是否正確,舉個例子來表達我的看法:假如現在需要建立乙個表,乙個什麼樣的表呢?乙個班級的學生個人資訊表:

所以在設計的時候,就給表1新增乙個外來鍵,這個外來鍵就是表2中的學號字段,那麼這樣表1就是主表,表2就是子表。所以結合2張表就能保持資料的一致性、完整性(估計就是還原成原來的那張大表吧)。

藉著這個例子再談談外來鍵的一些事項:

1、表1可以有乙個或者多個外來鍵,也可以沒有。(如果表1有多個外來鍵可不可以是這樣的情況,表2中的多個欄位是表1的外來鍵;或者說表1的多個外來鍵是在多個表中)

2、這個外來鍵可以不是表1的主鍵,但必須是子表的主鍵。(簡單的說就是,如果乙個欄位是某個表的外來鍵時,那麼該欄位必須是主鍵)

以上就是我個人對外鍵的理解。

----------------------------------------解---答---糾---正-----------------------------------------

+-------+ ref +-------+

| sub | ------> | main |

+-------+ +-------+

從表(sub)的某列引用(ref)主表(main)的某列的值。比如學生表有個學生編號(sid),分數表中的學生列(stu)引用學生表的學 生編號,此時對於分數表的 stu 來說,學生表的 sid 就是外來鍵。從表也叫外來鍵表,主表也叫主鍵表、外表,列也叫字段。

所以在設計的時候,就給表1新增乙個外來鍵,這個外來鍵就是表2中的學號字段,那麼這樣表1就是主表,表2就是子表

你的主從關係理解顛倒了。你的圖中,表1的確是主表,表2是子表,但不是叫做給表1新增乙個外來鍵,而是給表2新增乙個外來鍵,表2中的學號 欄位就叫外來鍵,它是表1學號字段的主鍵。你可以這樣說:表1的學號字段是表2的外來鍵。

你貼的已經解釋了。為了一張表記錄的資料不要太過冗餘。這和軟體工程的模組化思想差不多類似,只不過在資料庫中是對錶關係進行解耦,盡量讓表 記錄的資料單一化。就如你貼的中,把成績和學生資訊放在一張表中就太冗餘了,成績完全可以以學生的id作為區分標識。

你想想,你的圖中的第一章表分割成了表1和表2,表2的學號引用了表1的學號字段作為外來鍵,如果不建立外來鍵,只是和表1一樣單純性 地設立乙個學號字段,那麼和建立外來鍵有什麼區別呢?

比如表1中張三的學號為20140900001,那麼我在表2中插資料的時候在學號字段插20140900001來記錄張三的成績不也是做到了表 的解耦了嗎?

mysql外來鍵作用

一 如果一張表中有乙個非主鍵的字段指向了別一張表中的主鍵,就將該字段叫做外來鍵。一張表中可以有多個外來鍵。外來鍵的預設作用有兩點 1.對子表 外來鍵所在的表 的作用 子表在進行寫操作的時候,如果外來鍵字段在父表中找不到對應的匹配,操作就會失敗。2.對父表的作用 對父表的主鍵字段進行刪和改時,如果對應...

MYSQL 外來鍵 作用說明

外來鍵 是個 或數個 指向另外乙個 主鍵的字段。外來鍵的目的是確定資料的參考完整性 referential integrity 換言之,只有被准許的資料值才會被存入資料庫內。舉例來說,假設我們有兩個 乙個 customer 裡面記錄了所有顧客的資料 另乙個 orders 裡面記錄了所有顧客訂購的資料...

MySql外來鍵約束作用

no action 指定如果試圖刪除 修改某一行,而該行的鍵被其他表的現有行中的外來鍵所引用,則產生錯誤並回滾 delete update語句。cascade set null 和 set default 允許通過刪除或更新鍵值來影響指定具有外來鍵關係的表,這些外來鍵關係可追溯到在其中進行修改的表。...