【转】《与MySQL的零距离接触》第五章:子查询与连接 (5-5:使用INSERT…SELECT插入记录)

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>

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值