zoukankan      html  css  js  c++  java
  • 使用INSERT…SELECT语法插入记录(三十二)

      前面,我们在谈INSERT语句时,使用两种语句:INSERT…SELECT  和  INSERT…VALUES。

    INSERT…SELECT可以使用子查询。因为在写SELECT时。  ***  =    ***,这就是子查询。

      我们还以tdb_goods这张表为例,这张表目前一共有22条数据,但是这22条数据中有很多重复的信息,下面我们简单来查看一下。

    select  *   from   tdb_goodsG;

      比如这21、22条记录,他们的商品类别都是笔记本配件,他们的品牌都是索尼。这些都是重复的信息,我们都知道汉字占的字节数肯定要比数字要多,如果这种记录越来越多,那么你的数据表就越来越庞大,那么查找的时候速度就会越来越慢,那最好的办法就是使用外键来实现,如果使用外键,那么至少要有两张数据表,所以我们需要再做一张数据表来存储我们的产品分类和品牌。

     

     

     

     

      下面我们就来创建商品的分类表,操作命令及结果如下:

    CREATE  TABLE  IF  NOT   EXISTS   tdb_goods_cates(
    cate_id   SMALLINT  UNSIGNED  PRIMARY  KEY  AUTO_INCREENT,
    cate_name   VARCHAR(40)    NOT    NULL
    ); 

      OK,我们的数据表创建成功。

     

     

     

      那么我们该如何插入数据呢,难道我们要一条一条去查找吗,当然不用,一定会有其他的方法,我们可以对查找的分类进行分组来实现,下面我们来看一看我们该怎么写?操作命令及结果如下:

    SELECT  goods_cate  FROM  tdb_goods   GROUP  BY   goods_cate; 

      我们发现一共分了这么几类,那么下面我们就要把这几类写到我们刚创建的那张数据表中。理论上有两种方法,一种我们可以用INSERT语句逐条的去插入。这种比较麻烦,那么有没有更简单的方法吗,当然有,我们可以使用之前我们提到过的INSERT…SELECT语句来实现,意思就是将查询的结果写入到我们指定的数据表中。

     

     

     

     

      下面我们就来尝试一下这种方法,操作命令及结果如下:

    INSERT   tdb_goods_cates(cate_name)    SELECT  goods_cate  FROM  tdb_goods  GROUP    BY     goods_cate;

      我们发现记录插入成功,但是这里面还有一个问题,记录现在我们已经插入成功了,但是我们根本就没有使用过外键来实现。

     

     

     

      我们来查看一下,我们输入SELECT * FROM tdb_goodsG;结果如下:

      我们发现在这张表中仍然存储的是笔记本配件这些商品类别,而应该存储的是商品类别名所对应的那个数字编号,所以我们现在就需要根据我们的分类表去更新我们的商品表,就是参照tdb_goods_cates去更新tdb_goods这张表。以前我们学的是单表更新,那么现在我们要参照一个表去更新另一个表,那么这里就涉及到多表更新。

  • 相关阅读:
    前端学习之JavaScript
    前端学习之CSS
    前端学习之HTML
    MySQL多表查询(重要)
    C# 基本语法
    第 9 章 —— 原型模式
    第 7 章 —— 代理模式
    第 6 章 —— 装饰模式
    将搜索关键词加红
    SQL Server 创建触发器(trigger)
  • 原文地址:https://www.cnblogs.com/zlslch/p/6542393.html
Copyright © 2011-2022 走看看