MySQL中的外來鍵

2021-12-29 21:27:06 字數 2634 閱讀 2955

外來鍵:

外來鍵就是關聯式資料庫的乙個基本特徵的實現,表明該字段的值是跟外部的某個表的字段的值「對應」的,或者也可以說來自於該外部的某個表的某個字段值,如果給乙個設定外來鍵的字段插入乙個值,而該值並沒有在該外來鍵所指定的外部表中的對應字段**現,則該值就會插入失敗,也就是資料庫內部的」約束機制」(使我們的資料更加純淨)

下面舉個栗子來體會一下外來鍵的作用:

比如說我們有乙個班級表,當我們在學生表中錄入學生資訊時,需要錄入學生所在班級的id,這個時候如果我們沒有給這個學生表中的班級id設定外來鍵約束,很有可能我們在錄入學生資訊的時候手一抖就把學生的班級id錄錯了,而如果在給學生表中的班級id設定外來鍵約束,此時當我們錄入學生表中的班級id如果在對應的班級表的id欄位中沒有的話就會出現錯誤提示,而不是將錯誤的資料新增到資料表中。

使用外來鍵約束的好處:

foreign key 約束用於預防破壞表之間連線的行為。

foreign key 約束也能防止非法資料插入外來鍵列,因為它必須是它指向的那個表中的值之一

下面通過乙個栗子來演示一下上面那段連自己讀起來都很繞的話:

建立班級表(tab_class):

create table tab_class(

id_class int auto_increment primary key/*班級id*/

,class_name varchar(20) unique key /*班級名稱*/

,class_teacher varchar(20)/*班主任名字*/

, open_date timestamp/*開班時間*/

);建立好的表結構:

插入模擬資料:

這裡我們注意以下id_class的值 1-4

建立學生資訊表(tab_student):

create table tab_student(

student_id int auto_increment primary key, /*學生id*/

stu_name varchar(20),/*學生姓名*/

age tinyint,/*學生年齡*/

stu_class_id int,/*學生所在的班級id*/

foreign key (stu_class_id) references tab_class(id_class)/*給學生所在的班級設定外來鍵*/

);設定外來鍵的語法格式:

foreign key (欄位名) references 表名(欄位名)tab_student的表結構:

下面我們來向tab_student表中插入一條資料:

insert into tab_student (stu_name,age,stu_class_id) values ('xiaohua',20,10);由於給stu_class_id設定了外來鍵約束而要插入的班級id 10並不在tab_class表中的id_class的字段的值的範圍內,因此這條資料插入失敗,提示一下錯誤資訊:

error 1452 (23000): cannot add or update a child row: a foreign key constraint fails (`study_db`.`tab_student`, constraint `tab_student_ibfk_1` foreign key (`stu_class_id`) references `tab_class` (`id_class`))接下來我們再插入一條資料來驗證最開始所說的栗子:

insert into tab_student (stu_name,age,stu_class_id) values ('huahua',20,1);提示結果:

query ok, 1 row affected (0.04 sec)

插入成功!

這裡需要注意的是,當tab_class與tab_student之間的字段設定外來鍵關聯在之後,如果我們想要刪除tab_class表中的一行資料,需要確保tab_student中設定的外來鍵字段(stu_class_id)沒有引用tab_class中的(id_class),否則會提示下面的錯誤:

cannot delete or update a parent row: a foreign key constraint fails (`study_db`.`tab_student`, constraint `tab_student_ibfk_1` foreign key (`stu_class_id`) references `tab_class` (`id_class`))這種設計就保證了資料的一致性和完整性,假如你已經把id_class = 1對應班級表(tab_class)那條班級資料刪除了,這時學生表(tab_student)就無法根據stu_class_id = 1去查詢其所在的班級了。

mysql 所有外來鍵 mysql中的外來鍵

mysql中的外來鍵 1.預設的外來鍵存在之後,會對資料進行約束。1 約束1 如果子表中新增的資料,外來鍵字段對應的資料如果在父表中不存在,那麼新增失敗。有資料之後 2 約束2 父表不能刪除 或者修改 乙個被子表引用的資料記錄 3.外來鍵約束 預設的使用者所能看到的約束都是外來鍵的一種約束 嚴格模式...

mysql中的外來鍵

建立乙個外來鍵 第一種方法可以在建立表的時候建立 create table student id int primary key auto increment,name varchar 10 c id int constraint student foregin foreign key c id r...

mysql裡面的外來鍵 mysql中的外來鍵使用

這兩天有人問mysql中如何加外來鍵,今天抽時間總結一下。mysql中myisam和innodb儲存引擎都支援外來鍵 foreign key 但是myisam只能支援語法,卻不能實際使用。下面通過例子記錄下innodb中外鍵的使用方法 建立主表 mysql create table parent i...