MySQL學習筆記(11) 外來鍵

2021-10-02 11:44:05 字數 2502 閱讀 2680

foreign key,外面的鍵(鍵不在自己表中):

如果a表中有乙個字段(非主鍵)指向b表的主鍵,那麼將該子段稱之為外來鍵。a表被稱為從表,b表被稱為主表。

1.建立表的時候增加外來鍵

[

constraint

`外鍵名`

]foreign

key(外來鍵字段)

references 主表(主鍵)

--例項

create

table my_foreign(

id int

primary

keyauto_increment

, name varchar(10

)not

null

, class_id int

,-- 增加外來鍵,關聯my_class的主鍵欄位id

mul:多索引,外來鍵本身是乙個索引,外來鍵還要求外來鍵字段本身也是一種普通索引

2.在建立表後增加外來鍵

alter

table 從表 add

[constraint

`外鍵名`

]foreign

key(外來鍵字段)

references 主表(主鍵)

;--例項

alter

table my_foreign add

[constraint

`student_class_ibfk_1`

]foreign

key(class_id)

references my_class(id)

;--效果同上

事實上,外來鍵不允許修改,只能刪除再增加

alter

table 從表 drop

foreign

key 外鍵名;

--例項

alter

table my_foreign drop

foreign

key`my_foreign_ibfk_1`

;

alter

table 表名 drop

index 索引名字;

外來鍵字段需要保證與關聯的主鍵字段型別完全一致

基本屬性也要相同

外來鍵只能使用innodb儲存引擎,myisam不支援

通過建立外來鍵關係之後,對主表和從表會有一定的資料約束。

不能在從表中插入主表不存在的資料

不能在主表中刪除從表已有的資料

insert

into my_foreign values

(null

,'ykk',5

);-- 插入失敗,主表沒有5班

insert

into my_foreign values

(null

,'ykk',2

);-- 插入成功

delete

from my_class where id =2;

-- 刪除失敗,從表已經有對應資料了

可以在建立外來鍵的時候,對外鍵約束進行選擇性的操作。

add

foreign

key(外來鍵字段)

references 主表 (主鍵)

on 約束模式;

約束模式(約束物件主要是主表):

district:嚴格模式(預設的),主表不能刪除或者更新乙個已經被從表資料引用的記錄

cascade:級聯模式,主表變化,從表資料也變化

set null:置空模式,主表的操作之後(刪除),從表對應的資料(外來鍵字段)被置空,前提是外來鍵字段允許為空

通常進行約束使用的時候,需要指定操作:update 和 delete

常用的約束模式:

on

update

cascade

ondelete

setnull

-- 更新級聯,刪除置空

保證資料完整性:主表與從表的資料要一致

正因為外來鍵有非常強的資料約束,而且可能會導致資料在後台變化的不可控。導致程式在進行設計開發邏輯的時候,沒有辦法很好得把握資料,所以外來鍵較少使用。

MySql學習筆記 索引,外來鍵

索引由資料庫表中一列或多列組合而成,其作用是提高對錶中資料的查詢速度。索引是建立在表上的,是對資料庫表中一列或多列的值進行排序的一種結構。索引可以提高查詢的速度。通過索引,查詢資料時可以不必讀完記錄的所有資訊,而只是查詢索引列。否則,資料庫系統將讀取每條記錄的所有資訊進行匹配。例如,索引相當於新華字...

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

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

mysql學習之路 外來鍵

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