使用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这张表。以前我们学的是单表更新,那么现在我们要参照一个表去更新另一个表,那么这里就涉及到多表更新。
最新文章
- 通过c程序更改文件的ctime和mtime
- SPFA导读及介绍(转载)
- 通过源码学Java基础:BufferedReader和BufferedWriter
- mysql-----gtid_executed详解 原创
- 正确认识Android的内存管理机制,合理关闭进程 (一)
- 图标字体IcoMoon 使用
- 【转】在CentOS上安装tomcat
- Spring + Spring MVC + Hibernate项目开发集成(注解)
- C# 开发系列(一)
- Java之String、StringBuffer、StringBuilder
- 9.2.2、Libgdx的输入处理之事件处理
- 基于 HTML5 的 3D 工业互联网展示方案
- spring boot 入门及示例
- 软件工程(FZU2015) 赛季得分榜,第五回合
- c++简单学习
- JAVA项目中的常用的异常处理
- Apk反编译助手
- [iOS] Edit / Memo 原生控件才提供拼字检查
- jmeter分布式环境
- SVG中的元素属性
热门文章
- Centos7&;docker-ce&;compose&;wordpress
- SSIS安装以及安装好找不到商业智能各种坑
- 将Spring Boot应用程序迁移到Java9:兼容性
- 关于ValueAnimation以及Interpolator +Drawable实现的自己定义动画效果
- 深入C++ new/delete,malloc/free解析
- 空暇时候思考之const
- Linux经常使用命令(九) - cat
- js中编码的处理
- blog_html
- taglist安装