• 中文
    • 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
  • 3.1k
  • 请登录之后再进行评论

    登录
    单栏布局 侧栏位置: