淺談MySQL連接查詢與外鍵

連接查詢是同時查詢多張表,通過多張表之間的關係得到最終的結果。連接查詢又分成內連接、外鏈接和自然連接。

內連接:從左表中取出每一條記錄,去右表中與所有的記錄進行匹配;匹配必須是某個條件在左表中與右表中相同最終纔會保留結果,否則不保留。
這裏寫圖片描述
注意內連接可以沒有on之後的條件,此時查詢的結果是笛卡爾積。

外連接:以某張表爲主表,取出主表中的所有記錄,然後每一條記錄都與另外一張表進行連接。主表中的結果將全部保留,從表中內匹配的結果保留,不能匹配的結果都將置爲null。
外連接分成兩種,左外連接(left join)和右外連接(right join)
這裏寫圖片描述
這裏寫圖片描述

自然連接:自動匹配連接條件,系統將以字段名字作爲匹配模式(同名字段作爲條件)。自然連接分成自然內連接和自然外連接。

-- 自然內連接
select * from s_user natural join s_orderform;

-- 自然左外連接
select * from s_user natural left join s_orderform;

--自然右外連接
select * from s_user natural right join s_orderform;

這裏寫圖片描述
使用內連接和外連接來模擬自然連接:
左表 left/right join 右表 using(字段名);
這裏寫圖片描述

MySQL中增加外鍵(兩種方式):
方式一,在創建表的同時指定外鍵

-- 創建父表
create table my_class(id int primary key auto_increment,c_name varchar(20) not null,room varchar(20))charset utf8;
--引用外鍵創建表
create table my_foreign1(id int primary key auto_increment,name varchar(20) not null comment '學生姓名',c_id int comment '班級id',foreign key(c_id) references my_class(id))charset utf8;

這裏寫圖片描述
方式二:在創建完表之後增加外鍵:
語法:alter table 表名 add (constraint 外鍵名字) foreign key(外鍵字段) references 父表(主鍵字段);

create table my_foreign2(id int primary key auto_increment,name varchar(20) not null comment '學生姓名',c_id int comment '班級id')charset utf8;

alter table my_foreign2 add constraint student_class  foreign key(c_id) references my_class(id);

刪除外鍵:
alter table 表名 drop foreign key 外鍵名字

alter table my_foreign1 drop foreign key my_foreign1_ibfk_1;

注意:
要使外鍵創建成功,首先要保證表的存儲引擎是innodb(否則即使創建成功也不會有效果)。
注意外鍵的列類型必須和父表的主鍵列類型相一致。
外鍵有三種模式:
District:嚴格模式(默認的),父表不能更新或刪除一個字表已經引用的記錄。
cascade:級聯模式,父表刪除被引用的字段同時字表也會跟着刪除引用的字段。
set sull:置空模式,父表刪除被引用的字段同時字表會將引用的字段置爲空。
通常是將更新的時候模式設置爲cascade,刪除的時候將模式設置爲set null;
指定模式的語法:
foreign key(外鍵字段) references 父表(主鍵字段) on delete set null update cascade;

發佈了123 篇原創文章 · 獲贊 47 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章