前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL连表update操作

MySQL连表update操作

作者头像
半月无霜
发布2023-03-03 15:13:06
4.2K0
发布2023-03-03 15:13:06
举报
文章被收录于专栏:半月无霜

MySQL连表update操作

一、介绍

记录一下MySQL连表后进行update的操作,这可以一口气同时改动到多张表的数据,可以取到关联表的数据进行更新。

作用还是比较大的,如下

二、使用

1)建表

分别有以下四张表,分别为

  • 学生表
  • 班级表
  • 学生评分表
  • 班级评分表
代码语言:javascript
复制
CREATE TABLE `tb_student` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `code` varchar(20) NOT NULL COMMENT '学号',
  `name` varchar(20) NOT NULL COMMENT '姓名',
  `class_id` int(11) NOT NULL COMMENT '班级ID',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT = '学生表';

CREATE TABLE `tb_student_grade` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `student_id` int(11) NOT NULL COMMENT '学生ID',
  `grade` int(11) NOT NULL COMMENT '评分',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT = '学生评分表';

CREATE TABLE `tb_class` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `class_name` varchar(20) DEFAULT NULL COMMENT '班级名称',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT = '班级表';

CREATE TABLE `tb_class_grade` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `class_id` int(11) NOT NULL COMMENT '班级ID',
  `grade` int(11) NOT NULL COMMENT '评分',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT = '班级评分表';

模型如下图

image-20230111182914837
image-20230111182914837

2)连表更新

如果班级里张三比较调皮,在班级座位后面睡觉被校长发现了,要把这位学生和所在班级的评分,各扣10分

如果是以前,我可能是写两条update语句的sql,现在的话,可以关联起来这样写,如下


首先我们可以先写一个这样的sql,通过学生名称查询到学生分数,所在班级分数,那么这条sql就长这样

代码语言:javascript
复制
select 
	t1.grade as "学生分数",
	t2.grade as "班级分数"
from tb_student t0
join tb_student_grade t1 on t0.id = t1.student_id
join tb_class_grade t2 on t0.class_id = t2.class_id
where t0.`name` = '张三';
image-20230111185208548
image-20230111185208548

那么此时,我们只需要做一点小小的改动,就可以把上述sql改为连表update的了。

  1. select 字段... from 改为update
  2. where条件前写上自己,需要更新的字段

简单两步,改动结果后的sql如下

代码语言:javascript
复制
update tb_student t0
join tb_student_grade t1 on t0.id = t1.student_id
join tb_class_grade t2 on t0.class_id = t2.class_id
set t1.grade = t1.grade - 10,
	t2.grade = t2.grade - 10
where t0.`name` = '张三';

执行完成就可以了,再查询看看效果

image-20230111185713218
image-20230111185713218

三、最后

我是半月,你我一同共勉!!!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-01-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MySQL连表update操作
    • 一、介绍
      • 二、使用
        • 1)建表
        • 2)连表更新
      • 三、最后
      相关产品与服务
      云数据库 SQL Server
      腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档