首頁  >  文章  >  資料庫  >  mysql外鍵是什麼

mysql外鍵是什麼

藏色散人
藏色散人原創
2023-04-11 10:45:473416瀏覽

mysql外鍵是一個非常好用的資料處理功能,可以快速地進行表格之間的資料更新;簡單的來說就是可以將兩張表之間建立一個關聯,能做到操作一張表的時候,另外一個表的資料也會同步改變。

mysql外鍵是什麼

本教學操作環境:Windows10系統、mysql8版、Dell G3電腦。

mysql外鍵是什麼?

#Mysql外鍵的使用

#外鍵是一個非常非常好用的一個東西,同時也是很多關係資料庫都有的一種功能,簡單的來說就是可以將兩張表之間建立一個關聯,可以做到操作一張表的時候,另外一個表格的資料也會同步發生變化。

範例:
一个学生表里面有学生的所有信息,其中有一个字段是班级id,又有一个班级表,记录着所有的班级信息,按照逻辑来说,如果我们删除了班级
表里面的某个班级,学生表里面是这个班级id的信息就应该修改。

以上的例子我們如果是使用程式是可以正常的完成的,先刪除這個班級,再在學生表裡將是這個班級的學生資料的班級id字段進行修改,分為這兩部。但是這個如果我們使用了外鍵,只需要一步就可以了呀,關聯了外鍵 只要一個有修改,另外一個會自動的更新過去,顯然這個是更加符合程序的。也更輕鬆

使用前的細節
  1. 資料庫在選用儲存引擎的時候要選擇適配外鍵的儲存引擎,如mysql的預設存儲引擎innodb
  2. 相互關聯的外鍵欄位的欄位類型必須要保持一致,如學生表的class_id是int類型,那麼班級表的class_id的型別最好也要使用int型別,這個十分的​​重要
在新表中建立外鍵約束
	create table stu_study (
	  sid int primary key auto_increment,-- 定义Sid  
      sname varchar(15) not null,
      course_id int default null,  -- 定义课程id 课程id是外键所以要与关联的主表的字段类型保持一致
      constraint stu_study_class -- 一个表里可能有多个表之间关联,所以外键需要起一个名字
      foreign key (class_id) -- 关联的外键名
      references classes(id)  -- 关联的主表和主表的字段
      on delete cascade  -- 当删除的时候触发
    )engine=InnoDB default charset utf8  -- 默认存储引擎和编码的字符串

mysql外鍵是什麼

在現有的表中進行外鍵的新增與刪除
  1. 刪除外鍵
    ···
    – 刪除外鍵(外鍵約束)
    alter table stu_study drop foreign key stu_study_classes;
    ···
    mysql外鍵是什麼
    刪除外鍵是透過在表格中根據外鍵名進行刪除, 這個也是間接的讓我們知道了外鍵名是不能夠重複的。
  2. 新增外鍵
	-- 添加外键
  alter table stu_study add
  constraint stu_study_classes  -- 外键名 是一定不能够重复的,通常会用关联的两个表名进行命名
  foreign key(course_id)
  references classes(id)
  on delete cascade;

mysql外鍵是什麼
在已有的表中加入外鍵和建立表的時候新增外鍵是非常像的,有個細節就是他要使用contraint 外鍵名來設定外鍵的名稱
外鍵的增加修改我們會發現和表格欄位的增加修改是很像的,使用的關鍵字都是add drop等等

關聯動作的操作

子表
mysql外鍵是什麼
主表
mysql外鍵是什麼
字表和子表我們可以簡單的理解成,設定了外鍵的那個表就是子表
關聯動作有很多種,如cascade,set Nullno action這三個都是在設定外鍵的時候設定關聯動作,如
mysql外鍵是什麼
表示的是刪除時的執行的動作,主要差異如下:

  1. cascade 删除主表的某个字段的时候,子表含有这个字段的数据会被清空,这个还是属于相对危险的一个操作的
  2. +set null 删除主表的某个字段的时候,子表含有这个字段的这个哪一行的这个字段会用null来显示,但是有个细节就是设置外键的这个字段字段类型就不能设置为not null类型的,否则会报错
  3. no action 这个字段会比较有意思,也就是说当主表要删除某个行的时候,如果外键关联有含有这个主表的外键的字段数据的话,就不会删除成功,系统会直接报错
关联更新操作

之前是主要讲了关联删除,是因为外键在使用的时候关联删除操作是使用的比较频繁的,关联更新的频率是相对来说低一点儿的
关联更新的三个关联操作和删除时一样的,分别是cascade,set null,no action意思是也是一样的,主表某个字段更新了,子表也会更新那个字段!!,主表更新的某条数据,子表的使用的那个数据会变成空,和子表在使用的情况下,主表就不能够更新数据

	alter table stu_study drop foreign key stu_study_classes;  -- 删除外键
	-- 添加外键
	alter table stu_study add 
    constraint stu_study_classes 
    foreign key (course_id) 
    references classes(id) 
    on delete set null -- 一次性设置外键的两种动作
    on update cascade

mysql外鍵是什麼
mysql外鍵是什麼

总结
  • 数据库的外键是非常非常好用的一个技术,可以让我们快速的进行表之间的数据的更新
  • 外键可以简单的理解成会自动的替我们做一个数据变动的处理

推荐学习:《MySQL视频教程

以上是mysql外鍵是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn