• 中文
    • English
  • 注册
  • 查看作者
    • 5-5:使用INSERT…SELECT插入记录

      一.  前言

      我们在将INSERT语句的时候讲过,INSERT除了VALUES外还有INSERT SET用法,而INSERT SET和INSERST VALUES的一大区别就是INSERT SET可以使用子查询,而INSERT SELECT可以将查询的结果写入数据表

      另外在数据准备的过程中,很多字段都存在着重复的信息,比如很多品牌都是索尼,分类都是笔记本配件等,数据表一旦插入大量的记录时,查找数据的速度就会变慢,所以我们可以用以前学过的外键来解决这个问题

      二.INSERT SET和INSERT SELECT

      首先创建两个数据表作为外键,先创建商品分类表:

      mysql> CREATE TABLE IF NOT EXISTS tdb_goods_cates(
          -> cate_id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
          -> cate_name VARCHAR(40)
          -> );
      Query OK, 0 rows affected (0.06 sec)

      如何插入商品分类表呢?本例只有几个商品分类表,可以一条条的导入,但是如果有几万个甚至更多的分类,一条条的手动导入显然是不可能的,但是可以利用前面学到的知识,查找的时候按照分类进行分组并使用INSERT SELECT语句便能解决这个问题,首先查看一下所有的分类:

      mysql> SELECT goods_cate FROM tdb_goods GROUP BY goods_cate;
      +---------------+
      | goods_cate    |
      +---------------+
      | 台式机            |
      | 平板电脑             |
      | 服务器/工作站            |
      | 游戏本             |
      | 笔记本            |
      | 笔记本配件            |
      | 超级本              |
      +---------------+
      7 rows in set (0.03 sec)

      可以看到一共有7类,接下来使用INSERT SELECT将查询结果插入到商品分类表中:

      mysql> INSERT tdb_goods_cates(cate_name) SELECT goods_cate FROM tdb_goods GROUP BY goods_cate;
      Query OK, 7 rows affected (0.01 sec)
      Records: 7  Duplicates: 0  Warnings: 0
      
      mysql> SELECT * FROM tdb_goods_cates;
      +---------+---------------+
      | cate_id | cate_name     |
      +---------+---------------+
      |       1 | 台式机            |
      |       2 | 平板电脑             |
      |       3 | 服务器/工作站            |
      |       4 | 游戏本             |
      |       5 | 笔记本            |
      |       6 | 笔记本配件            |
      |       7 | 超级本              |
      +---------+---------------+
      7 rows in set (0.00 sec)
      
      mysql>

      可以看到写入成功,参照分类表更新商品表的操作是多表更新,和以往的单表更新不同,我们将在下一节中讲解

    • 0
    • 0
    • 0
    • 2.8k
    • 请登录之后再进行评论

      登录

      赞助本站

      • 支付宝
      • 微信
      • QQ

      感谢一直支持本站的所有人!

      单栏布局 侧栏位置: