mysql外來鍵操作

2021-10-03 05:25:04 字數 3083 閱讀 4726

msyql中提供了兩種方式增加外來鍵

方案1:在建立表的時候增加外來鍵(類似主鍵)

基本語法:在字段後增加一條語句

[constraint`外鍵名`] foreign key(外來鍵字段) references 主表(主鍵)

create

table my_foreign(

id int

primary

keyauto_increment

,name varchar(10

)not

null

,-- 關聯班級my_class

class_id int

,foreign

key(class_id)

references my_class(class_id)

);

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

方案2:在建立表後增加外來鍵

alter table 從表 add [constraint外鍵名`] foreign key()

-- 修改my_student表,將class_id設為外來鍵字段

alter

table my_student add

constraint

`student_class_ibfk_1`

foreign

key(class_id)

references my_class(class_id)

;

外來鍵不允許修改,只能先刪除後增加

基本語法:alter table 從表 drop foreign key 外鍵名字;

-- 刪除外來鍵

alter

table my_student drop

foreign

key`student_class_ibfk_1`

;

外來鍵建立會自動增減乙個索引;但是外來鍵刪除自會刪除自己,不會刪除普通索引

刪除對應的索引: alter table 表名 drop index 索引名字;
1. 外來鍵字段需要保證與關聯的主表的主鍵字段型別完全一致

2. 基本屬性也要相同

3. 如果是在表後增加外來鍵,對資料還有一定要求(從表資料與主表的關聯關係)

4. 外來鍵只能使用innodb儲存引擎

外來鍵約束:通過建立外來鍵關係之後,對主表和從表都會有一定的資料約束效率。
當乙個外來鍵產生時:外來鍵所在的表(從表)會受制於主表資料的存在從而導致資料不能進行某些不符合規範的操作(不能插入主表不存在的資料);

如果一張表被其他表外來鍵引入,那麼該錶的資料操作就不能隨意;必須保證從表資料的有效性(不能隨便刪除乙個被從表引入的記錄)

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

基本語法:add foreign key(外來鍵字段) references 主表(主鍵) on 約束模式

約束模式有三種:

1.district:嚴格模式,預設的,不允許操作

2.cascade:級聯模式,一起操作,主表變化,從表資料跟著變化

3.set null:置空模式,主表變化(刪除),從表對應記錄設定為空:前提是從表中對應外來鍵字段允許為空。

外來鍵約束主要約束的物件是主表操作:從表就是不能插入主表不存在的資料

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

常用的約束模式:on update cascade,on delete set null,更新級聯,刪除置空

# 更新模式

alter

table my_student add

foreign

key(class_id)

references my_class(class_id)

-- 約束條件

onupdate

cascade

ondelete

setnull

;-- 更新主表

update my_class set class_id =

4where class_id =2;

-- 執行更新主表操作後,從表也隨便主表的變化而變化了

#刪除模式

delete

from my_class where class_id =4;

-- 執行以上操作後,學生表my_student class_id原來值為4欄位現在全部為空

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

正因為外來鍵有非常強大的資料約束作用,而且可能導致資料在後台變化的不可控。導致程式在進行設計開發邏輯的時候,

沒有辦法去很好的把握資料(業務),所以外來鍵比較少用

選項

說明constraint

為外來鍵約束定義名稱

foreign key

子表與父表關聯的列

references

子表關聯的父表字段

on delete

父表刪除時的處理方式

on update

父表更新時的處理方式

on delete cascade

刪除父表記錄時,子表記錄同時刪除

on delete set null

刪除父表記錄時,子表記錄設定為null(子表字段要允許null)

on delete no action on delete restrict

刪除父表記錄時,子表不做任何處理,必須把子表處理完才可以刪除主表

on update cascade

更新父表記錄時,比如更改主表的主鍵時,子表記錄同時更新

on update set null

更新父表記錄時,比如更改主表的主鍵時,子表記錄設定為null

on update no action on update restrict

更新父表記錄時,子表不做任何處理,必須把子表處理完才可以更新主表

mysql 簡單外來鍵操作

一 基本概念 1 mysql中 鍵 和 索引 的定義相同,所以外來鍵和主鍵一樣也是索引的一種。不同的是mysql會自動為所有表的主鍵進行索引,但是外來鍵字段必須由使用者進行明確的索引。用於外來鍵關係的字段必須在所有的參照表中進行明確地索引,innodb不能自動地建立索引。2 外來鍵可以是一對一的,乙...

Mysql主鍵外來鍵操作

級聯操作 外來鍵 一對多 多對多 一對一 修改表 複製表 主鍵 primary key auto increment primary key是主鍵通常和auto increment自動增加混合使用 把所有資料存放到一張表中的弊端 組織結構不清晰 浪費硬碟空間 擴充套件性差 create table ...

mysql 外來鍵 del 記錄 MySQL 外來鍵

在mysql中 1 mysql 資料表主要支援六種型別 分別是 bdb heap isam merge myisam innobdb。這六種又分為兩類,一類是 事務安全型 transaction safe 包括bdb和innodb 其餘都屬於第二類,稱為 非事務安全型 non transaction...