打赏

使用INSERT…SELECT语法插入记录(三十二)

 

 

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

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

 

 

 

 

 

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

select  *   from   tdb_goods\G;

  比如这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_goods\G;结果如下:

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

posted @ 2017-03-13 13:30  大数据和AI躺过的坑  阅读(4864)  评论(0编辑  收藏  举报