外鍵的作用:
約束作用
eg:商品表有類別id指郁,關(guān)聯(lián)類別表的id? ? ? ?的這樣插入商品的時候,關(guān)聯(lián)類別表的id必須要插入類別表里邊有的id才行
拆分表格
? ? ? ? ? ? ? ? ? ? ? ?把圖一拆分成圖二-圖1-圖2霎箍,參考圖三
圖一
圖二
圖1
圖2
圖三
一畴蒲、goods_cates
-- unsigned:無符號(非負數(shù))
-- 創(chuàng)建商品分類表
create table if not exists goods_cates(?
? ? id int unsigned primary key auto_increment,
? ? name varchar(40) not null-- 類別名稱 40字長度 不允許為空
);
-- 查詢goods表中商品的種類
select cate_name from goods group by cate_name;?
-- 將分組結(jié)果寫入到goods_cates數(shù)據(jù)表
insert into goods_cates (name) select cate_name from goods group by cate_name;-- select前不能加values??
-- 通過goods_cates數(shù)據(jù)表來更新goods表
update goods as g inner join goods_cates as c on g.cate_name=c.name set g.cate_name=c.id;
-- 解釋:更新goods表起別名g —— inner join goods_cates關(guān)聯(lián)類別表 —— 給類別表起名c —— on后面相當條件 —— g.cate_name=c.name 關(guān)聯(lián)條件商品表的類別名稱=類別表名稱 —— set g.cate_name=c.id設(shè)置商品表的類別名稱=……
-- 通過alter table語句修改表結(jié)構(gòu)(既改名字又改類型)change:重命名
alter table goods change cate_name cate_id int unsigned not null;-- 類別的名稱cate_name重命名為cate_id
-- 關(guān)聯(lián)外鍵
alter table goods add foreign key (cate_id) references goods_cates(id);
-- 給alter table goods添加一個foreign key(外鍵)給cate_id設(shè) —— references:關(guān)聯(lián) 和goods_cates類別表的id關(guān)聯(lián)
-- 在 goods 數(shù)據(jù)表中插入商品(用來測試外鍵的)
insert into goods (name,cate_id,brand_id,price)
values('LaserJet Pro P1606dn 黑白激光打印機', 12, 4,'1849');
-- 取消外鍵
alter table goods drop foreign key goods_ibfk_1;
二首量、goods_brands
-- unsigned:無符號(非負數(shù))
-- 創(chuàng)建商品分類表
create table if not exists goods_brands(?
? ? id int unsigned primary key auto_increment,
? ? name varchar(40) not null-- 類別名稱 40字長度 不允許為空
);
-- 查詢goods表中商品的種類
select brand_name from goods group by brand_name;
-- 將分組結(jié)果寫入到goods_cates數(shù)據(jù)表
insert into goods_brands (name) select brand_name from goods group by brand_name;-- select前不能加values??
-- 通過goods_cates數(shù)據(jù)表來更新goods表
-- 更新goods表起別名g —— inner join goods_cates關(guān)聯(lián)類別表 —— 給類別表起名c —— on后面相當條件 —— g.cate_name=c.name 關(guān)聯(lián)條件商品表的類別名稱=類別表名稱 —— set g.cate_name=c.id設(shè)置商品表的類別名稱=……
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類別表中插入記錄
insert into goods_brands(name) values ('路由器'),('交換機'),('網(wǎng)卡');
-- 通過alter table語句修改表結(jié)構(gòu)(既改名字又改類型)change:重命名
alter table goods change brand_name brand_id int unsigned not null;-- 類別的名稱brand_name重命名為brand_id
-- 關(guān)聯(lián)外鍵
-- 給alter table goods添加一個foreign key(外鍵)給cate_id設(shè) —— references:關(guān)聯(lián) 和goods_cates類別表的id關(guān)聯(lián)
alter table goods add foreign key (brand_id) references goods_brands(id);
-- 在 goods 數(shù)據(jù)表中插入商品(用來測試外鍵的)
insert into goods (name,cate_id,brand_id,price)
values('LaserJet Pro P1606dn 黑白激光打印機', 12, 4,'1849');
-- 取消外鍵
alter table goods drop foreign key goods_ibfk_2;