"""
cate_name:分类名称
brand_name:品牌
is_show:是否显示
is_saleoff:是否售罄/是否卖光了
工作中的时候尽量使用group by 分组进行筛选,where用的较少.
select round(avg(price),2) from goods group by cate_name;
在一个库中查询另外一个库的表
格式: select * from 库.表;
示例:当前数据库是jd,如果想要执行jing_dong这个数据库中的表数据,如下:
1.>select database();
+------------+
| database() |
+------------+
| jd |
+------------+
1 row in set (0.00 sec)
2.>mysql> select * from jing_dong.goods;
+----+---------------------------------------+---------+----------+-----------+---------+------------+
| id | name | cate_id | brand_id | price | is_show | is_saleoff |
+----+---------------------------------------+---------+----------+-----------+---------+------------+
| 1 | r510vc 15.6英寸笔记本 | 5 | 2 | 3399.000 | | |
| 2 | y400n 14.0英寸笔记本电脑 | 5 | 7 | 4999.000 | | |
| 3 | g150th 15.6英寸游戏本 | 4 | 9 | 8499.000 | | |
| 4 | x550cc 15.6英寸笔记本 | 5 | 2 | 2799.000 | | |
| 5 | x240 超极本 | 7 | 7 | 4880.000 | | |
| 6 | u330p 13.3英寸超极本 | 7 | 7 | 4299.000 | | |
| 7 | svp13226scb 触控超极本 | 7 | 6 | 7999.000 | | |
| 8 | ipad mini 7.9英寸平板电脑 | 2 | 8 | 1998.000 | | |
| 9 | ipad air 9.7英寸平板电脑 | 2 | 8 | 3388.000 | | |
| 10 | ipad mini 配备 retina 显示屏 | 2 | 8 | 2788.000 | | |
| 11 | ideacentre c340 20英寸一体电脑 | 1 | 7 | 3499.000 | | |
| 12 | vostro 3800-r1206 台式电脑 | 1 | 5 | 2899.000 | | |
| 13 | imac me086ch/a 21.5英寸一体电脑 | 1 | 8 | 9188.000 | | |
| 14 | at7-7414lp 台式电脑 linux ) | 1 | 3 | 3699.000 | | |
| 15 | z220sff f4f06pa工作站 | 3 | 4 | 4288.000 | | |
| 16 | poweredge ii服务器 | 3 | 5 | 5388.000 | | |
| 17 | mac pro专业级台式电脑 | 3 | 8 | 28888.000 | | |
| 18 | hmz-t3w 头戴显示设备 | 6 | 6 | 6999.000 | | |
| 19 | 商务双肩背包 | 6 | 6 | 99.000 | | |
| 20 | x3250 m4机架式服务器 | 3 | 1 | 6888.000 | | |
| 21 | 商务双肩背包 | 6 | 6 | 99.000 | | |
+----+---------------------------------------+---------+----------+-----------+---------+------------+
21 rows in set (0.00 sec)
问题:很多数据放在一张表中,如果删除其中一部分,就会把其他字段的数据也删除了但是这个字段也应该保留下来
原因:
删除异常:品牌分类跟随着商品信息一起被删除
分类 品牌信息和商品信息分开存储-->解决删除异常
品牌和分类信息应该独立于商品信息独立存在
1.> 直接将select的结果插入到另外一张表中: 千万记得没有values关键字
insert into goods_cates (name) select cate_name from goods group by cate_name;
2.>使用一个表的字段更新另外一个字段--->连表更新
goods join goods_cates on goods.cate_name=goods_cates.name ---> 这是一张表
select * from goods join goods_cates on goods.cate_name=goods_cates.name;
+----+---------------------------------------+---------------------+------------+-----------+---------+------------+----+---------------------+
| id | name | cate_name | brand_name | price | is_show | is_saleoff | id | name |
+----+---------------------------------------+---------------------+------------+-----------+---------+------------+----+---------------------+
| 1 | r510vc 15.6英寸笔记本 | 笔记本 | 华硕 | 3399.000 | | | 5 | 笔记本 |
| 2 | y400n 14.0英寸笔记本电脑 | 笔记本 | 联想 | 4999.000 | | | 5 | 笔记本 |
| 3 | g150th 15.6英寸游戏本 | 游戏本 | 雷神 | 8499.000 | | | 4 | 游戏本 |
| 4 | x550cc 15.6英寸笔记本 | 笔记本 | 华硕 | 2799.000 | | | 5 | 笔记本 |
| 5 | x240 超极本 | 超级本 | 联想 | 4880.000 | | | 7 | 超级本 |
| 6 | u330p 13.3英寸超极本 | 超级本 | 联想 | 4299.000 | | | 7 | 超级本 |
| 7 | svp13226scb 触控超极本 | 超级本 | 索尼 | 7999.000 | | | 7 | 超级本 |
| 8 | ipad mini 7.9英寸平板电脑 | 平板电脑 | 苹果 | 1998.000 | | | 2 | 平板电脑 |
| 9 | ipad air 9.7英寸平板电脑 | 平板电脑 | 苹果 | 3388.000 | | | 2 | 平板电脑 |
| 10 | ipad mini 配备 retina 显示屏 | 平板电脑 | 苹果 | 2788.000 | | | 2 | 平板电脑 |
| 11 | ideacentre c340 20英寸一体电脑 | 台式机 | 联想 | 3499.000 | | | 1 | 台式机 |
| 12 | vostro 3800-r1206 台式电脑 | 台式机 | 戴尔 | 2899.000 | | | 1 | 台式机 |
| 13 | imac me086ch/a 21.5英寸一体电脑 | 台式机 | 苹果 | 9188.000 | | | 1 | 台式机 |
| 14 | at7-7414lp 台式电脑 linux ) | 台式机 | 宏碁 | 3699.000 | | | 1 | 台式机 |
| 15 | z220sff f4f06pa工作站 | 服务器/工作站 | 惠普 | 4288.000 | | | 3 | 服务器/工作站 |
| 16 | poweredge ii服务器 | 服务器/工作站 | 戴尔 | 5388.000 | | | 3 | 服务器/工作站 |
| 17 | mac pro专业级台式电脑 | 服务器/工作站 | 苹果 | 28888.000 | | | 3 | 服务器/工作站 |
| 18 | hmz-t3w 头戴显示设备 | 笔记本配件 | 索尼 | 6999.000 | | | 6 | 笔记本配件 |
| 19 | 商务双肩背包 | 笔记本配件 | 索尼 | 99.000 | | | 6 | 笔记本配件 |
| 20 | x3250 m4机架式服务器 | 服务器/工作站 | ibm | 6888.000 | | | 3 | 服务器/工作站 |
| 21 | 商务双肩背包 | 笔记本配件 | 索尼 | 99.000 | | | 6 | 笔记本配件 |
+----+---------------------------------------+---------------------+------------+-----------+---------+------------+----+---------------------+
使用商品分类表中的id去更新goods商品表中的cate_name
update goods join goods_cates on goods.cate_name=goods_cates.name
set goods.cate_name = goods_cates.id;
1.>一步创建
create table goods_brands(
-> id int unsigned primary key auto_increment,
-> name varchar(32) not null) select brand_name as name from goods group by brand_name;
使用品牌表中的品牌id去修改商品表中的品牌信息
2.>这就是一张表: goods join goods_brands on goods.brand_name=goods_brands.name
select * from goods join goods_brands on goods.brand_name=goods_brands.name;
update goods join goods_brands on goods.brand_name=goods_brands.name set goods.brand_name = goods_brands.id;
修改商品表的表结构中的字段名 类型 约束 记得alter table 的table不能丢了.
alter table goods change cate_name cate_id int unsigned not null, change brand_name brand_id int unsigned not null;
"""
"""外键约束:foreign key"""
"""
A表中A字段引用了B表的B字段的值
含有外键的称为子表
提供外键所需数据的叫父表
A-->子表
B-->父表
外键的效果:
引擎 是InnoDB才支持外键
外键是一种强制约束
CONSTRAINT `goods_ibfk_1` FOREIGN KEY (`brand_id`) REFERENCES `goods_brands` (`id`),
外键约束名为:goods_ibfk_1
删除外键约束:
alter table goods drop foreign key goods_ibfk_1;
a字段的所有取值必须在b字段出现过. ----> 外键约束
# 查看三张表的数据. ----> 这里记得看下
select * from goods join goods_cates on goods.cate_id=goods_cates.id join goods_brands on goods.brand_id=goods_brands.id;
+----+---------------------------------------+---------+----------+-----------+---------+------------+----+---------------------+----+--------+
| id | name | cate_id | brand_id | price | is_show | is_saleoff | id | name | id | name |
+----+---------------------------------------+---------+----------+-----------+---------+------------+----+---------------------+----+--------+
| 1 | r510vc 15.6英寸笔记本 | 5 | 2 | 3399.000 | | | 5 | 笔记本 | 2 | 华硕 |
| 2 | y400n 14.0英寸笔记本电脑 | 5 | 7 | 4999.000 | | | 5 | 笔记本 | 7 | 联想 |
| 3 | g150th 15.6英寸游戏本 | 4 | 9 | 8499.000 | | | 4 | 游戏本 | 9 | 雷神 |
| 4 | x550cc 15.6英寸笔记本 | 5 | 2 | 2799.000 | | | 5 | 笔记本 | 2 | 华硕 |
| 5 | x240 超极本 | 7 | 7 | 4880.000 | | | 7 | 超级本 | 7 | 联想 |
| 6 | u330p 13.3英寸超极本 | 7 | 7 | 4299.000 | | | 7 | 超级本 | 7 | 联想 |
| 7 | svp13226scb 触控超极本 | 7 | 6 | 7999.000 | | | 7 | 超级本 | 6 | 索尼 |
| 8 | ipad mini 7.9英寸平板电脑 | 2 | 8 | 1998.000 | | | 2 | 平板电脑 | 8 | 苹果 |
| 9 | ipad air 9.7英寸平板电脑 | 2 | 8 | 3388.000 | | | 2 | 平板电脑 | 8 | 苹果 |
| 10 | ipad mini 配备 retina 显示屏 | 2 | 8 | 2788.000 | | | 2 | 平板电脑 | 8 | 苹果 |
| 11 | ideacentre c340 20英寸一体电脑 | 1 | 7 | 3499.000 | | | 1 | 台式机 | 7 | 联想 |
| 12 | vostro 3800-r1206 台式电脑 | 1 | 5 | 2899.000 | | | 1 | 台式机 | 5 | 戴尔 |
| 13 | imac me086ch/a 21.5英寸一体电脑 | 1 | 8 | 9188.000 | | | 1 | 台式机 | 8 | 苹果 |
| 14 | at7-7414lp 台式电脑 linux ) | 1 | 3 | 3699.000 | | | 1 | 台式机 | 3 | 宏碁 |
| 15 | z220sff f4f06pa工作站 | 3 | 4 | 4288.000 | | | 3 | 服务器/工作站 | 4 | 惠普 |
| 16 | poweredge ii服务器 | 3 | 5 | 5388.000 | | | 3 | 服务器/工作站 | 5 | 戴尔 |
| 17 | mac pro专业级台式电脑 | 3 | 8 | 28888.000 | | | 3 | 服务器/工作站 | 8 | 苹果 |
| 18 | hmz-t3w 头戴显示设备 | 6 | 6 | 6999.000 | | | 6 | 笔记本配件 | 6 | 索尼 |
| 19 | 商务双肩背包 | 6 | 6 | 99.000 | | | 6 | 笔记本配件 | 6 | 索尼 |
| 20 | x3250 m4机架式服务器 | 3 | 1 | 6888.000 | | | 3 | 服务器/工作站 | 1 | ibm |
| 21 | 商务双肩背包 | 6 | 6 | 99.000 | | | 6 | 笔记本配件 | 6 | 索尼 |
+----+---------------------------------------+---------+----------+-----------+---------+------------+----+---------------------+----+--------+
"""