mysql外鍵是一個非常好用的資料處理功能,可以快速地進行表格之間的資料更新;簡單的來說就是可以將兩張表之間建立一個關聯,能做到操作一張表的時候,另外一個表的資料也會同步改變。
本教學操作環境:Windows10系統、mysql8版、Dell G3電腦。
mysql外鍵是什麼?
#外鍵是一個非常非常好用的一個東西,同時也是很多關係資料庫都有的一種功能,簡單的來說就是可以將兩張表之間建立一個關聯,可以做到操作一張表的時候,另外一個表格的資料也會同步發生變化。
一个学生表里面有学生的所有信息,其中有一个字段是班级id,又有一个班级表,记录着所有的班级信息,按照逻辑来说,如果我们删除了班级 表里面的某个班级,学生表里面是这个班级id的信息就应该修改。
以上的例子我們如果是使用程式是可以正常的完成的,先刪除這個班級,再在學生表裡將是這個班級的學生資料的班級id字段進行修改,分為這兩部。但是這個如果我們使用了外鍵,只需要一步就可以了呀,關聯了外鍵 只要一個有修改,另外一個會自動的更新過去,顯然這個是更加符合程序的。也更輕鬆
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 -- 默认存储引擎和编码的字符串
-- 添加外键 alter table stu_study add constraint stu_study_classes -- 外键名 是一定不能够重复的,通常会用关联的两个表名进行命名 foreign key(course_id) references classes(id) on delete cascade;
在已有的表中加入外鍵和建立表的時候新增外鍵是非常像的,有個細節就是他要使用contraint 外鍵名來設定外鍵的名稱
外鍵的增加修改我們會發現和表格欄位的增加修改是很像的,使用的關鍵字都是add drop等等
子表
主表
字表和子表我們可以簡單的理解成,設定了外鍵的那個表就是子表
關聯動作有很多種,如cascade
,set Null
,no action
這三個都是在設定外鍵的時候設定關聯動作,如
表示的是刪除時的執行的動作,主要差異如下:
cascade
删除主表的某个字段的时候,子表含有这个字段的数据会被清空,这个还是属于相对危险的一个操作的+set null
删除主表的某个字段的时候,子表含有这个字段的这个哪一行的这个字段会用null来显示,但是有个细节就是设置外键的这个字段字段类型就不能设置为not null类型的,否则会报错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外鍵是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!