数据库编程提高

"""
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 | 索尼   |
+----+---------------------------------------+---------+----------+-----------+---------+------------+----+---------------------+----+--------+


"""
posted @ 2019-12-26 10:04  砚台是黑的  阅读(139)  评论(0编辑  收藏  举报