Mysql學習歷程(13) 外來鍵

2021-08-03 15:14:15 字數 1569 閱讀 6342

外來鍵 foreign key  如果一張表中有乙個字段,非主鍵指向另一張表的主鍵,那麼將該字段稱為外來鍵

增加外來鍵:在建立表的時候或者建立表之後增加(但要考慮資料的問題);

建立表的時候增加外來鍵,在所有表字段之後,使用foreign key (外來鍵字段) references  外部表(主鍵字段);

create table my_foreign(

id int primary key auto_increment,

name varchar(20) not null comment '學生姓名',

c_id int comment '班級id',

foreign key (c_id) references my_class (id)

)charset utf8 engine innodb;

注意:外來鍵要求字段本身必須先是乙個索引(普通索引),如果字段本身沒有索引,外來鍵會先建立乙個索引,然後才會建立外來鍵本身.

新增的表建立之後增加外來鍵,修改表結構:

alter table 表名  add constraint  外鍵名字  foreign key (外來鍵字段) references 父表(主鍵字段);

alter table my_student_1  add  constraint 

my_student_1_cid foreign key (c_id)

references my_class(id);

外來鍵修改必須先刪除後新增;刪除外來鍵,  alter table drop foreign key 外鍵名 ;  --  一張表可以有多個外來鍵,但是外鍵名不能相同;

外來鍵刪除後不能通過檢視表結構體現,應該通過檢視表建立語句檢視;

外來鍵作用:1.對子表約束,子表進行寫操作的時候,如果對應外來鍵字段在父表中找不到對應的匹配,那麼操作會失敗;

2.對父表約束,父表進行寫操作(刪和改,資料都涉及到主鍵本身),如果對應主鍵在子表中已經被資料所引用,那麼不允許操作;

外來鍵條件:1.必須保證儲存引擎為innodb 預設的儲存引擎,;如果不是innodb,那麼外來鍵可以建立成功,但是沒有約束效果

2.外來鍵字段的字段型別(列型別)必須與父表的主鍵型別完全一致;

3.一張表中外鍵名字不能重複;

4.增加外來鍵的字段(資料已經存在),必須保證資料與父表主鍵要求對應;

外來鍵約束:外來鍵的作用,其實可以通過對外鍵的需求,進行定製操作;

外來鍵約束有三種約束模式,都是針對父表的約束

1.distinct:嚴格模式,預設的,父表不能刪除或更新乙個已經被子表資料引用的記錄;

2.cascade:級聯模式,父表的操作,對應子表關聯資料也跟著操作

3.set null:置空模式,父表的操作之,子表中對應的資料(外來鍵字段)被置空;

合理的約束模式:刪除的時候子表置空,更新的時候子表級聯操作;

指定模式語法:foreign key (外來鍵字段) references  父表 (主鍵字段)  on delete 模式 on update 模式

刪除置空的前提:外來鍵字段允許為空(如果不滿足條件,外來鍵無法建立);

mysql書外來鍵 MySQL學習5 外來鍵續

一對多補充 級聯刪除 當一張表刪除記錄時,若繫結給了另一張表中的外來鍵,則一同刪除另一張表中關聯的記錄 更新於刪除都需要考慮到關聯與被關聯的關係 同步更新與同步刪除 被關聯表 create table dep id int primary key auto increment,dep name ch...

mysql學習之路 外來鍵

連線多張表到一起,不管記錄數如何,字段數一定會增加。分類 內連線,外連線。自然連線,交叉連線,交叉連線 cross join 笛卡爾積 內連線 inner join,左右兩張表有連線條件匹配 不匹配自動忽略 外連線 left right join 主表的一條記錄一定會存在匹配保留副表資料,否則置空 ...

MySQL學習4 外來鍵

把所有資料都存放於一張表的弊端 1.組織結構不清晰 2.浪費硬碟空間 3.擴充套件性極差 一對多 foreign key 注意 mysql中表與表的關係,只有 一對多 沒有多對一 foreign key的用法 1 在建立表時,先建被關聯的表dep,才能建關聯表emp 先建立被關聯表 相當於先建立被關...