一. 前言
我们在将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>
可以看到写入成功,参照分类表更新商品表的操作是多表更新,和以往的单表更新不同,我们将在下一节中讲解
请登录之后再进行评论