設定外來鍵的目的:保證資料的一致性!
一、外來鍵的使用條件:
① 兩個表必須是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...