外來鍵的設定

2021-09-29 03:19:20 字數 1749 閱讀 5731

設定外來鍵的目的:保證資料的一致性!

一、外來鍵的使用條件:

① 兩個表必須是innodb表,myisam表暫時不支援外來鍵

#檢視表型別

show

table

status

#查詢結果的engine欄位下,一般預設innodb型別

② 外來鍵列必須建立了索引,mysql 4.1.2以後的版本在建立外來鍵時會自動建立索引,但如果在較早的版本則需要顯式建立;

#建立索引

create

index 欄位1

on test(欄位1

)#對test2建立test的索引,在test2下執行,test2為從,test為主

這一步也是博主自己剛開始研究是碰到的最大的坑,

外來鍵引用一直選不了對應字段,可能是你沒有設定索引

③ 外來鍵關係的兩個表的列必須是資料型別相似,也就是可以相互轉換型別的列,比如int和tinyint可以,而int和char則不可以;

二、設定外來鍵

1、sql**設定

alter

table test2

add *** #約束名 自己起

foreign

key test(欄位2

)#外來鍵

references test2(欄位2

)#約束表字段

ondelete

cascade

#父表刪除子表更新方式

onupdate

cascade

;#父表更新子表更新方式

2、視覺化介面設定

選中表—》關/系/外來鍵 | f10 ——》外部鍵

約束名自動生成不用管,重點是後面的更新和刪除關鍵字

三、相關關鍵字含義

外來鍵約束(表2)對父表(表1)的含義:

在父表上進行update/delete以更新或刪除在子表中有一條或多條對應匹配行的候選鍵時,父表的行為取決於:在定義子表的外來鍵時指定的on update/on delete子句。

關鍵字含義

cascade

刪除包含與已刪除鍵值有參照關係的所有記錄

set null

修改包含與已刪除鍵值有參照關係的所有記錄,使用null值替換(只能用於已標記為not null的字段)

restrict

拒絕刪除要求,直到使用刪除鍵值的輔助表被手工刪除,並且沒有參照時(這是預設設定,也是最安全的設定)

no action

啥也不做

四、外來鍵約束使用最多的兩種情況:

場景關鍵字選擇

①父表更新時子表也更新,父表刪除時如果子表有匹配的項,刪除失敗;

on update cascade on delete restrict;

②父表更新時子表也更新,父表刪除時子表匹配的項也刪除。

on update cascade on delete cascade;

2、兩表關聯更新操作:

如何設定外來鍵?

什麼是外來鍵?好好體會這句話 如果關係模式r中的某屬性集不是r的 主鍵,而是另乙個關係r1的主鍵則該屬性集是關係模式r的外來鍵,通常在資料庫設計中縮寫為fk。看下面的例子。其中,公司代號這個屬性集不是第一張表的主鍵,而是第二張表中的主鍵,則公司代號這個屬性集是第一張表的外來鍵。然後這個公司代號就成為...

PowerDesigner 設定外來鍵

外來鍵 如果是由概念模型或者邏輯模型生成物理模型,那麼外來鍵是通過relationship生成的,也可以通過工具欄中的reference來實現兩表之間的外來鍵關係。假如乙個課程只會在乙個固定的教室上課,而乙個教室會安排多個課程在不同的時間上課,所以教室和課程是一對多的關係,那麼課程表中就需要新增ro...

Mysql外來鍵設定

為已經新增好的資料表新增外來鍵 語法 alter table 表名 add constraint fk id foreign key 你的外來鍵欄位名 references 外表表名 對應的表的主鍵欄位名 例 alter table tb active add constraint fk id fo...