HTML基礎(chǔ)知識(shí)(30)外鍵的運(yùn)用、條件及約束送挑、

一、增加外鍵

創(chuàng)建表的時(shí)候增加外鍵:在所有的表字段之后暖眼,使用foreign key(外鍵字段) references 外部表(主鍵字段)

在新增表之后增加外鍵:修改表結(jié)構(gòu)惕耕,使用alter table 表名 add [constraint 外鍵名字] foreign key(外鍵字段) references 父表(主鍵字段);

二、修改外鍵&刪除外鍵

alter table 表名 drop foreign key 外鍵名;

三诫肠、外鍵條件

外鍵要存在司澎,首先必須保證表的存儲(chǔ)引擎是innodb

列類型必須與父表的主鍵類型一致

一張表中的外鍵名字不能重復(fù)

增加外鍵的字段數(shù)據(jù)已經(jīng)存在欺缘,必須保證數(shù)據(jù)與父表主鍵要求對(duì)應(yīng)

四、外鍵約束

有三種約束模式

1挤安、district:嚴(yán)格模式(默認(rèn)的)

2谚殊、cascade:級(jí)聯(lián)模式

3、set null:置空模式

語法:foreign key(外鍵字段) references 父表(主鍵字段) on delete 模式 on update 模式;

五蛤铜、聯(lián)合查詢

1嫩絮、基本語法:

select 語句1

union [union 選項(xiàng)]

select 語句2……

2、union 選項(xiàng)

all:保留所有围肥,不管重復(fù)

distinct:去重剿干,默認(rèn)的

六、按位置分類

from子查詢

where子查詢

exists子查詢

七穆刻、按結(jié)果分類

標(biāo)量子查詢

列子查詢

行子查詢

表子查詢




————————代碼練習(xí)————————————————


-- 創(chuàng)建外鍵

create table my_foreign1(

idint primary key auto_increment,

namevarchar(20)not null comment

'學(xué)生姓名',

c_idint comment'班級(jí)id',

-- 增加外鍵

foreign key(c_id)references my_class(id)

)charset utf8;

-- 創(chuàng)建表

create table my_foreign2(

idint primary key auto_increment,

namevarchar(20)not null comment

'學(xué)生姓名',

c_idint comment'班級(jí)id' -- 普通字段

)charset utf8;

-- 增加外鍵

alter table my_foreign2add

-- 指定外鍵名

constraint student_class_1

-- 指定外鍵字段

foreign key(c_id)

-- 引用父表主鍵

references my_class(id);

-- 刪除外鍵

alter table my_foreign1drop

foreign key my_foreign1_ibfk_1;

-- 插入數(shù)據(jù):外鍵字段在父表不存在

insert into my_foreign2values(null,'郭富城',4);-- 沒有4號(hào)班級(jí)

insert into my_foreign2values(null,'項(xiàng)羽',1);

insert into my_foreign2values(null,'劉邦',2);

insert into my_foreign2values(null,'韓信',3);

-- 更新父表記錄

update my_classset id=4 where id=1;-- 失斨枚:id=1的記錄已經(jīng)被學(xué)生引用

update my_classset id=5 where id=3;-- 可以改,沒有學(xué)生引用此班級(jí)

-- 插入數(shù)據(jù)

insert into my_foreign1values(

null,'馬超',3);

-- 增加外鍵

alter table my_foreign1add foreign key(c_id)references my_class(id);

-- 失斍馕啊:因?yàn)闆]有3號(hào)班

-- 創(chuàng)建外鍵:指定模式:刪除置空榜轿,更新及聯(lián)

create table my_foreign3(

idint primary key auto_increment,

namevarchar(20)not null,

c_idint,

-- 增加外鍵

foreign key(c_id)

-- 引用表

references my_class(id)

-- 指定刪除模式

on delete set null

-- 指定更新模式

on update cascade

)charset utf8;

-- 插入數(shù)據(jù)

insert into my_foreign3values

(null,'劉備',1),

(null,'曹操',1),

(null,'孫權(quán)',1),

(null,'諸葛亮',2),

(null,'周瑜',2);

-- 解除my_foreign2表的外鍵

alter table my_foreign2drop

foreign key student_class_1;

-- 增新父表主鍵

update my_classset id=3 where id=1;

-- 刪除父表主鍵

delete from my_classwhere id=2;

-- 聯(lián)合查詢

select *from my_class

union -- 默認(rèn)去重

select *from my_class;

select *from my_class

union all -- 不去重

select *from my_class;

select id,c_name,roomfrom my_class

union all -- 不去重

select name,number,idfrom my_student;

-- 需求: 男生升序,女生降序 (年齡)

(select *from my_student

where sex='男'

order by ageasc limit9999999)

union

(select *from my_student

where sex='女'

order by agedesc limit9999999);

select *from my_studentwhere

c_id=(

-- 標(biāo)量子查詢

select idfrom my_classwhere

c_name='Python1903');-- id一定只有一個(gè)值(一行一列)

insert into my_classvalues(1,'Python1907','B407');

-- 列子查詢

select *from my_studentwhere c_idin(select idfrom my_class);

-- any,some,all

select *from my_studentwhere c_id =any(select idfrom my_class);

select *from my_studentwhere c_id =some(select idfrom my_class);

select *from my_studentwhere c_id =all(select idfrom my_class);

select *from my_studentwhere c_id !=any(select idfrom my_class);-- 所有結(jié)果(NULL除外)

select *from my_studentwhere c_id !=some(select idfrom my_class);-- 所有結(jié)果(NULL除外)

select *from my_studentwhere c_id !=all(select idfrom my_class);-- 2號(hào)班級(jí)(NULL除外)

select *from my_studentwhere

age=(select max(age)from my_student)

and

height=(select max(height)from my_student);

-- 行子查詢

select *from my_student

-- (age,height)稱之為行元素

where (age,height)=(

select max(age),max(height)from my_student);

select *from my_studentorder by agedesc,heightdesc limit1;

-- 表子查詢

select *from my_studentgroup by c_idorder by heightdesc;-- 每個(gè)班選出的第一個(gè)學(xué)生

select *from (select *from my_studentorder by heightdesc)

as studentgroup by c_id;-- 每個(gè)班選出的第一個(gè)學(xué)生再按身高排序

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末朵锣,一起剝皮案震驚了整個(gè)濱河市差导,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌猪勇,老刑警劉巖设褐,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異泣刹,居然都是意外死亡助析,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門椅您,熙熙樓的掌柜王于貴愁眉苦臉地迎上來外冀,“玉大人,你說我怎么就攤上這事掀泳⊙┧恚” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵员舵,是天一觀的道長脑沿。 經(jīng)常有香客問我,道長马僻,這世上最難降的妖魔是什么庄拇? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上措近,老公的妹妹穿的比我還像新娘溶弟。我一直安慰自己,他們只是感情好瞭郑,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布辜御。 她就那樣靜靜地躺著,像睡著了一般屈张。 火紅的嫁衣襯著肌膚如雪擒权。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天袜茧,我揣著相機(jī)與錄音菜拓,去河邊找鬼。 笑死笛厦,一個(gè)胖子當(dāng)著我的面吹牛纳鼎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播裳凸,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼贱鄙,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了姨谷?” 一聲冷哼從身側(cè)響起逗宁,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎梦湘,沒想到半個(gè)月后瞎颗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡捌议,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年哼拔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瓣颅。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡倦逐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出宫补,到底是詐尸還是另有隱情檬姥,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布粉怕,位于F島的核電站健民,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏斋荞。R本人自食惡果不足惜荞雏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望平酿。 院中可真熱鬧凤优,春花似錦、人聲如沸蜈彼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽幸逆。三九已至棍辕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間还绘,已是汗流浹背楚昭。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拍顷,地道東北人抚太。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像昔案,于是被迫代替她去往敵國和親尿贫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容