如果公共關鍵字在乙個關係中是主關鍵字,那麼這個公共關鍵字被稱為另乙個關係的外來鍵。由此可見,外來鍵表示了兩個關係之間的相關聯絡。以另乙個關係的外來鍵作為主關鍵字的表被稱為主表,具有此外鍵的表被稱為主表的從表,外來鍵又稱之為外關鍵字
外來鍵:foreign key ,一張表(a)中有乙個字段儲存的值指向另外一張表(b)的主鍵
b:主表
a:從表
提供了兩種方式增加外來鍵:
1、在建立表的時候增加外來鍵(類似主鍵)
基本語法:在字段之後增加一條語句
[constraint `外鍵名`] foreign key(外來鍵字段) references 主表(主鍵);
mul:多索引,外來鍵本身是乙個索引,還要求外來鍵字段本身也是一種普通索引
2、在建立表後增加外來鍵
基本語法:alter table 從表 add [constraint `外鍵名`] foreign key(外來鍵字段) references 主表(主鍵);
外來鍵不允許修改,只能先刪除後增加。
基本語法:alter table 從表 drop foreign key 外鍵名字;
外來鍵不能刪除產生的普通索引,只會刪除自己。如果想要刪除對應的索引:alter table 表名 drop index 索引名字;
1、外來鍵字段需要保證與關聯的主表的主關鍵字字段型別完全一致
2、基本屬性也要相同
3、如果在表後增加外來鍵,對資料還有一定的要求(從表資料與主表的關聯關係)
4、外來鍵只能使用innodb儲存引擎
外來鍵約束:通過建立外來鍵關係之後,對主表和從表都會有一定的資料約束效率。
1、當乙個外來鍵產生時:外來鍵所在的表(從表)會受制於主表資料的存在從而導致資料不能進行某些不符合規範的操作(不能插入主表不存在的資料);
2、如果一張表被其他表外來鍵引入,那麼該錶的資料操作就不能隨意,必須保證從表資料的有效性(不能隨便刪除乙個被從表引入的記錄)
可以在建立外來鍵的時候,對外鍵約束進行選擇性的操作。
基本語法:add foreign key(外來鍵字段)references 主表(主鍵) on 約束模式;
約束模式有三種:
1、district:嚴格模式(預設),不允許操作
2、cascade:級聯模式,一起操作,主表變化,從表資料跟著變化
3、set null:置空模式,主表變化(刪除),從表對應記錄設定為空:前提是從表中對應的外來鍵字段允許為空。
外來鍵約束的主要約束物件是主表操作:從表就是不能插入主表不存在的資料。
通常在進行約束使用的時候,需要指定操作:update 和delete
常用的約束模式:on update cascade,on delete set null,更新級聯,刪除置空
保證資料的完整性:主表與從表的資料要一致。
正是因為外來鍵有非常強大的資料約束作用,而且可能導致資料在後台變化的不可控,導致程式在進行設計開發邏輯的時候,沒有辦法很好的把握資料(業務),所以外來鍵比較少使用。
posted @
2018-09-09 10:42
木辛tiamo 閱讀(
...)
編輯收藏
MySQL 資料庫外來鍵
如果表a的主關鍵字是表b中的字段,則該字段稱為表b的外來鍵,表a稱為主表,表b稱為從表。外來鍵是用來實現參照完整性的,不同的外來鍵約束方式將可以使兩張表緊密的結合起來,特別是修改或者刪除的級聯操作將使得日常的維護工作更加輕鬆。這裡以mysql為例,總結一下3種外來鍵約束方式的區別和聯絡。這裡以使用者...
MySQL資料庫外來鍵
設定外來鍵 外來鍵及功能 成績表 參照表也叫子表 中的學號來自學生表 被參照表也叫父表 成績表中的課程號來自課程表 當要刪除或更新被參照表中的給字段的值時,參照錶該字段的值如何改變。在on delete on update設定參照動作 restrict 限制 cascade 級聯 set null ...
mysql資料庫教程 外來鍵 MySQL資料庫外來鍵
設定外來鍵 外來鍵及功能 成績表 參照表也叫子表 中的學號來自學生表 被參照表也叫父表 成績表中的課程號來自課程表 當要刪除或更新被參照表中的給字段的值時,參照錶該字段的值如何改變。在on delete on update設定參照動作 restrict 限制 cascade 級聯 set null ...