外鍵的作用以及拆分商品分類(lèi)表、商品品牌表

外鍵的作用:

約束作用

eg:商品表有類(lèi)別id,關(guān)聯(lián)類(lèi)別表的id必須要插入類(lèi)別表里邊有的id才行

拆分表格

? ? ? ? ? ? ? ? ? ? ? ?把圖一拆分成圖二-圖1-圖2,參考圖三

圖一
圖二


圖1
圖2
圖三

一、goods_cates

-- unsigned:無(wú)符號(hào)(非負(fù)數(shù))

-- 創(chuàng)建商品分類(lèi)表

create table if not exists goods_cates(?

? ? id int unsigned primary key auto_increment,

? ? name varchar(40) not null-- 類(lèi)別名稱(chēng) 40字長(zhǎng)度 不允許為空

);

-- 查詢(xún)goods表中商品的種類(lèi)

select cate_name from goods group by cate_name;?

-- 將分組結(jié)果寫(xiě)入到goods_cates數(shù)據(jù)表

insert into goods_cates (name) select cate_name from goods group by cate_name;-- select前不能加values??

-- 通過(guò)goods_cates數(shù)據(jù)表來(lái)更新goods表

update goods as g inner join goods_cates as c on g.cate_name=c.name set g.cate_name=c.id;

-- 解釋?zhuān)焊耮oods表起別名g —— inner join goods_cates關(guān)聯(lián)類(lèi)別表 —— 給類(lèi)別表起名c —— on后面相當(dāng)條件 —— g.cate_name=c.name 關(guān)聯(lián)條件商品表的類(lèi)別名稱(chēng)=類(lèi)別表名稱(chēng) —— set g.cate_name=c.id設(shè)置商品表的類(lèi)別名稱(chēng)=……

-- 通過(guò)alter table語(yǔ)句修改表結(jié)構(gòu)(既改名字又改類(lèi)型)change:重命名

alter table goods change cate_name cate_id int unsigned not null;-- 類(lèi)別的名稱(chēng)cate_name重命名為cate_id

-- 關(guān)聯(lián)外鍵

alter table goods add foreign key (cate_id) references goods_cates(id);

-- 給alter table goods添加一個(gè)foreign key(外鍵)給cate_id設(shè) —— references:關(guān)聯(lián) 和goods_cates類(lèi)別表的id關(guān)聯(lián)

-- 在 goods 數(shù)據(jù)表中插入商品(用來(lái)測(cè)試外鍵的)

insert into goods (name,cate_id,brand_id,price)

values('LaserJet Pro P1606dn 黑白激光打印機(jī)', 12, 4,'1849');

-- 取消外鍵

alter table goods drop foreign key goods_ibfk_1;

二、goods_brands

-- unsigned:無(wú)符號(hào)(非負(fù)數(shù))

-- 創(chuàng)建商品分類(lèi)表

create table if not exists goods_brands(?

? ? id int unsigned primary key auto_increment,

? ? name varchar(40) not null-- 類(lèi)別名稱(chēng) 40字長(zhǎng)度 不允許為空

);

-- 查詢(xún)goods表中商品的種類(lèi)

select brand_name from goods group by brand_name;

-- 將分組結(jié)果寫(xiě)入到goods_cates數(shù)據(jù)表

insert into goods_brands (name) select brand_name from goods group by brand_name;-- select前不能加values??

-- 通過(guò)goods_cates數(shù)據(jù)表來(lái)更新goods表

-- 更新goods表起別名g —— inner join goods_cates關(guān)聯(lián)類(lèi)別表 —— 給類(lèi)別表起名c —— on后面相當(dāng)條件 —— g.cate_name=c.name 關(guān)聯(lián)條件商品表的類(lèi)別名稱(chēng)=類(lèi)別表名稱(chēng) —— set g.cate_name=c.id設(shè)置商品表的類(lèi)別名稱(chēng)=……

update goods as g inner join goods_brands as b on g.brand_name=b.name set g.brand_name=b.id;

-- 分別在goods_cates和goods_brands類(lèi)別表中插入記錄

insert into goods_brands(name) values ('路由器'),('交換機(jī)'),('網(wǎng)卡');

-- 通過(guò)alter table語(yǔ)句修改表結(jié)構(gòu)(既改名字又改類(lèi)型)change:重命名

alter table goods change brand_name brand_id int unsigned not null;-- 類(lèi)別的名稱(chēng)brand_name重命名為brand_id

-- 關(guān)聯(lián)外鍵

-- 給alter table goods添加一個(gè)foreign key(外鍵)給cate_id設(shè) —— references:關(guān)聯(lián) 和goods_cates類(lèi)別表的id關(guān)聯(lián)

alter table goods add foreign key (brand_id) references goods_brands(id);

-- 在 goods 數(shù)據(jù)表中插入商品(用來(lái)測(cè)試外鍵的)

insert into goods (name,cate_id,brand_id,price)

values('LaserJet Pro P1606dn 黑白激光打印機(jī)', 12, 4,'1849');

-- 取消外鍵

alter table goods drop foreign key goods_ibfk_2;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過(guò)簡(jiǎn)信或評(píng)論聯(lián)系作者。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容