首页 > 代码库 > 多表更新

多表更新

 

 

 

技术分享

 

 

 

 

 

 

 

 

一、多表更新的语法结构

UPDATE table_references

SET col_name1={expr1 | DEFAULT}

[,col_name2={expr2 | DEFAULT}] …

[WHERE where_condition]

 

 

 

 

二、表的参照关系的语法结构

table_reference

{[INNER | CROSS] JOIN | {LEFT | RIGHT} [OUTER] JOIN}

table_reference

ON conditional_expr

 

 

 

 

 

 

技术分享

三、表的连接类型

INNER JOIN,内连接

在MySQL中,JOIN,CROSS JOIN和INNER JOIN是等价的

LEFT [OUTER] JOIN,左外连接

RIGHT [OUTER] JOIN,右外连接

  了解完这些基本内容,下面我们再来看一下刚才那个问题,就是用商品类别表来更新商品表。就是把商品类别在商品表中用数字来表示。

 

 

 

 

3.1   下面我们来尝试一下内连接这种连接类型,我们参照多表更新的语法结构,我们输入如下命令:

技术分享

UPDATE   tdb_goods  INNER   JOIN  tdb_goods_ cates   ON   goods_cate =  cate_name   SET  goods_cate =  cate_id;

  OK,命令执行成功。

 

 

 

  下面我们就来看一下这个商品表到底有没有改变我们输入SELECT * FROM tdb_goods\G;命令执行结果如下:

技术分享

我们发现他们已经都改为数字了。

  这就是简单的多表更新,就是参照一个表来更新另一个表。【下一页】

  即参考商品类型表,来更新商品表

 

 

 

 

下面我们简单来总结一下多表更新的步骤。大概分为3步,

  第一步:先创建一个新表

  第二步:把对应数据插入到这个新表当中

  第三步:进行多表的更新

 

 

 

  那么能不能省掉几步呢?当然可以。这就是我们下面要讲的CREATE..SELECT。

它就是对刚才的前两步做了一下精简,合为了一步。

 

 

 

3.2   CREATE…SELECT创建数据表同时将查询结果写入到数据表

语法结构如下:

CREATE TABLE [IF NOT EXISTS] tbl_name

[(create_definition,…)]

select_statement

 

 

  下面我们就以品牌名称为例来给大家做一下演示。

  我们先来查看一下总共有哪几个品牌,操作命令及执行结果如下:

技术分享

SELECT  brand_name  FROM  tdb_goods  GROUP BY   brand_name;

 

 

 

 

 

  下面我们就用刚才那种方法同时来实现创建和插入操作。我们按照语法结构我们输入如下命令:

技术分享

CREATE  TABLE   tdb_goods_brands(
brand_id  SMALLINT   UNSIGNED  PRIMARY  KEY  AUTO_INCREMENT,
brand_name   VARCHAR(40)  NOT  NULL
)
SELECT   brand_name  FROM  tdb_goods  GROUP  BY  brand_name;

 

 

 

 

 

 

技术分享

SELECT   *   FROM  tdb_goods_brands;

 

 

 

 

  下面我们就来参照我们的品牌表来更新我们的商品表,同样也是在商品表中用数字来代替对应的品牌。我们输入如下命令:

技术分享

UPDATE  tdb_goods  AS a  INNER    JOIN   tdb_goods_brands    AS
b    ON     a.brand_name =  b.brand_name  SET   a.brand_name  =  b.brand_id;

 

 

 

 

  下面我们再来查看一下商品表来验证一下是否修改成功。我们输入如下命令:SELECT * FROM tdb_goods\G;

技术分享

  我们发现都已经修改为了我们想要的信息。

 

 

  这里边还有一个小的问题,我们再来查看一下商品表的表结构,我们输入SHOW COLUMNS FROM tdb_goods;

技术分享

  理论上我们已经把我们的品牌名和类别名改为了数字。但是表结构中的这两个字段的类型仍然是字符型而不是数字类型。这里我们往往要对字段做一下简单的修改。像goods_cate我们会改为cate_id,所以这里我们就需要修改一下表的结构。

 

  这里我们既要改字段名又要改字段类型,所以我们最好用change,我们输入如下命令:

技术分享

ALTER  TABLE    tdb_goods
CHANGE   goods_cate  cate_id   SMALLINT   UNSIGNED  NOT  NULL,
CHANGE   brand_name   brand_id   SMALLINT   UNSIGNED  NOT  NULL;

 

 

 

 

  现在我们再来查看一下表的结构,我们输入SHOW COLUMNS FROM tdb_goods;

技术分享

  OK,我们发现这两个字段名以及类型都已经改过来了,这就达到了我们瘦身的目的。

  如果我们要把我们表中的记录展示给浏览者去看,但是我们存储的时候可以用数字表示,我们希望给用户看的时候最好是能直接看到类别的名称或品牌的名称,那么这就需要几张表一起来协作。所以我们就会用到我们接下来要学习的连接来实现。

 

多表更新