zoukankan      html  css  js  c++  java
  • 数据库编程提高

    """
    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 | 索尼   |
    +----+---------------------------------------+---------+----------+-----------+---------+------------+----+---------------------+----+--------+
    
    
    """
  • 相关阅读:
    jq幻灯片2013-8-31
    jq设置样式
    KindEditor编辑器常用操作
    深入理解JavaScript模拟私有成员
    后台常见报错处理和注意问题(二)
    从项目上一个子查询扩展学习开来:mysql的查询、子查询及连接查询
    在MySQL中使用子查询和标量子查询的基本用法
    HQL语句中数据类型转换,及hibernate中createQuery执行hql报错
    SQL中的cast()函数
    模糊搜索:concat各种函数详解、like操作符、通配符
  • 原文地址:https://www.cnblogs.com/huaibin/p/12100545.html
Copyright © 2011-2022 走看看