多表更新(三十三)

摘要:
这是一个简单的多表更新。它指的是通过引用一个表来更新另一个表。即,参考商品类型表以更新商品表。让我们简要总结一下更新多个表的步骤。大约有三个步骤。步骤1:创建新表。步骤2:将相应的数据插入到新表中。步骤3:更新多个表。可以节省多少步骤?

多表更新(三十三)第1张

 

一、多表更新的语法结构

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

 

 

 

 

 

 

多表更新(三十三)第2张

三、表的连接类型

INNER JOIN,内连接

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

LEFT [OUTER] JOIN,左外连接

RIGHT [OUTER] JOIN,右外连接

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

 

 

 

 

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

多表更新(三十三)第3张

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

  OK,命令执行成功。

 

 

 

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

多表更新(三十三)第4张

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

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

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

 

 

 

 

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

  第一步:先创建一个新表

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

  第三步:进行多表的更新

 

 

 

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

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

 

 

 

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

语法结构如下:

CREATE TABLE [IF NOT EXISTS] tbl_name

[(create_definition,…)]

select_statement

 

 

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

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

多表更新(三十三)第5张

SELECT  brand_name  FROM  tdb_goods  GROUP BY   brand_name;

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

多表更新(三十三)第6张

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;

多表更新(三十三)第7张

SELECT   *   FROM  tdb_goods_brands;

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

多表更新(三十三)第8张

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_goodsG;

多表更新(三十三)第9张

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

 

 

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

多表更新(三十三)第10张

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

 

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

多表更新(三十三)第11张

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;

多表更新(三十三)第12张

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

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

免责声明:文章转载自《多表更新(三十三)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇springboot任务之异步任务Redmine:CKEditor插件安装下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

VB6.0操作SQL Server——增删改查

http://www.cnblogs.com/Miss-Lin/archive/2012/08/13/2635848.html一、数据录入通过VB向SQL Server数据库中录入数据,可以使用数据绑定控件录入数据与使用SQL语句录入 1.利用数据绑定控件录入数据 使用数据绑定控件录入数据可以运行较少的代码,实现向数据库中录入数据,数据绑定后,由于数据...

[转]Oracle存储过程给变量赋值的方法

原文地址:http://blog.csdn.net/drbing/article/details/51821262 截止到目前我发现有三种方法可以在存储过程中给变量进行赋值:1、直接法     :=       如:v_flag := 0;2、select into   如:假设变量名为v_flag,select count(*) into v_flag...

sqlserver取绝对值的abs()函数

SQL Server中提供了一个取绝对值的ABS()函数。 ABS(numeric_expression) 返回值的类型和参数的类型一致。 SELECT ABS(-123); --123 SELECT ABS(-123.00); --123.00 这个函数对0值和正值并没有什么意义,返回的是原值。 SELECT ABS(0); --0 SELECT AB...

Oracle用户,权限,角色以及登录管理 scoot 授权

Oracle用户,权限,角色以及登录管理 1. sys和system用户的区别 system用户只能用normal身份登陆em。除非你对它授予了sysdba的系统权限或者syspoer系统权限。sys用户具有“SYSDBA”或者“SYSOPER”权限,登陆em也只能用这两个身份,不能用normal。 -- 最重要的区别,存储的数据的重要性不同 sys所有...

HiveSQL 数据定义语言(DDL)

第一章、数据定义语言(DDL)概述 1.1 DDL语法的作用 数据定义语言 (Data Definition Language, DDL),是SQL语言集中对数据库内部的对象结构进行创建,删除,修改等的操作语言,这些数据库对象包括database(schema)、table、view、index等。核心语法由CREATE、ALTER与DROP三个所组成。D...

Oracle视图和PL SQL编程.

Oracle中的视图 在Oracle数据库中视图是数据库中特有的对象。视图主要用于数据查询,它不会存储数据(物化视图除外)。这是视图和数据表的重要区别。 视图的数据来源于一个或等多个表中的数据,可以利用视图进行查询、插入、更新和删除数据,操作视图就是间接操作数据库表。 通常情况下,视图主要用于查询,不提倡通过视图而更新与视图相关的表,因为视图中的数据只是一...