分享一段数据库中表数据更新SQL

本文涉及的产品
可视分析地图(DataV-Atlas),3 个项目,100M 存储空间
简介:

应用场景

我们在应用程序开发的时候,经常会遇到这样的一种情况:附属表更新了,主表的数据没有更新,这个关联表不只是外键的关联(通过附属表 ID 关联),主表中还会存在一些附属表的字段,这样一般做的目的是,在查询显示的时候减少关联(性能考虑)。凡事都有相对性,比如我们有时候会对附属表中的数据进行更新,如果没有对附属字段添加触发器,这时候就造成附属表中的数据和主表不一致,没办法,我们需要对这些“过时数据”进行手动“刷新”。

比如我们有 Product 和 Provider 表,一个商品对应一个提供商,表结构如下(只做演示):

Product 和 Provider 表之间的关系通过 ProviderID 字段进行关联,ProviderName 这个字段就是上面我们说,为了减少关联查询用的,那如果 Provider 表中的 Name 值更新了,如何更新 Product 表中的 ProviderName 值呢?

问题分析

这个数据更新的问题,其实现在看来非常简单,但是我当时在解决这个问题的时候,莫名其妙多了很多想法,对于程序员来说,两个数据集的对应数据更新,我们怎么处理呢?最简单的是遍历然后再另一个数据集中进行查找,然后对查找后的结果进行修改保存,这是一般做法,比如下面的这段伪代码:

   DataView product = new DataView();
   DataView provider = new DataView();
   foreach (DataRow item in provider)
   {
       product.RowFilter = string.Format("ProviderID={0}", item["ID"]);
       //todo...
   }

上面这段代码是我们一般不经过大脑写出来的,试着想一下,如果存在几十万甚至几百万的数据,这种方式程序肯定会运行到明年,不可否认,当时我想过这种方式实现的,而且还是想写个程序脚本来完成数据更新,这是多么的不靠谱啊。

如果不用程序去完成数据更新,我们就得写 SQL 脚本,数据库也不是很熟悉,只能说会简单的语法(select),连修改列的属性都忘了,幸亏在去年毕业的时候,整理了一个简单 T-SQL 系列《T-Sql学习系列完结》,现在看来,当时真是太明智了,虽然这些简单的语法网上一找一大堆,但还是觉得自己整理的看着舒服。

实现上面数据更新有很多方式,我当时还想过用游标操作,但是一想和程序中的 foreach 有什么区别的呢?还是觉得干点实事吧,最后有了下面的一段 SQL 脚本,针对上面 Product 和 Provider 表的数据更新:

   update [dbo].[Product]
   set [dbo].[Product].ProviderName=[dbo].[Provider].Name
   from [dbo].[Provider]
   where [dbo].[Product].ProviderID=[dbo].[Provider].ID and ....

就这么简单,当时却花了很长的时间,甚至还有个疑问:不是一个数据库的表进行数据更新,可以用 SQL 实现吗?有点可笑,其实一个数据库实例下,跨数据库访问表的话,直接在表名之前加数据库名称就行了。



本文转自田园里的蟋蟀博客园博客,原文链接:http://www.cnblogs.com/xishuai/p/3920134.html,如需转载请自行联系原作者

相关实践学习
DataV Board用户界面概览
本实验带领用户熟悉DataV Board这款可视化产品的用户界面
阿里云实时数仓实战 - 项目介绍及架构设计
课程简介 1)学习搭建一个数据仓库的过程,理解数据在整个数仓架构的从采集、存储、计算、输出、展示的整个业务流程。 2)整个数仓体系完全搭建在阿里云架构上,理解并学会运用各个服务组件,了解各个组件之间如何配合联动。 3 )前置知识要求   课程大纲 第一章 了解数据仓库概念 初步了解数据仓库是干什么的 第二章 按照企业开发的标准去搭建一个数据仓库 数据仓库的需求是什么 架构 怎么选型怎么购买服务器 第三章 数据生成模块 用户形成数据的一个准备 按照企业的标准,准备了十一张用户行为表 方便使用 第四章 采集模块的搭建 购买阿里云服务器 安装 JDK 安装 Flume 第五章 用户行为数据仓库 严格按照企业的标准开发 第六章 搭建业务数仓理论基础和对表的分类同步 第七章 业务数仓的搭建  业务行为数仓效果图  
相关文章
|
3月前
|
SQL 开发框架 .NET
ASP.NET连接SQL数据库:详细步骤与最佳实践指南ali01n.xinmi1009fan.com
随着Web开发技术的不断进步,ASP.NET已成为一种非常流行的Web应用程序开发框架。在ASP.NET项目中,我们经常需要与数据库进行交互,特别是SQL数据库。本文将详细介绍如何在ASP.NET项目中连接SQL数据库,并提供最佳实践指南以确保开发过程的稳定性和效率。一、准备工作在开始之前,请确保您
310 3
|
17天前
|
SQL Oracle 数据库
使用访问指导(SQL Access Advisor)优化数据库业务负载
本文介绍了Oracle的SQL访问指导(SQL Access Advisor)的应用场景及其使用方法。访问指导通过分析给定的工作负载,提供索引、物化视图和分区等方面的优化建议,帮助DBA提升数据库性能。具体步骤包括创建访问指导任务、创建工作负载、连接工作负载至访问指导、设置任务参数、运行访问指导、查看和应用优化建议。访问指导不仅针对单条SQL语句,还能综合考虑多条SQL语句的优化效果,为DBA提供全面的决策支持。
44 11
|
2月前
|
SQL 缓存 监控
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
本文详细解析了数据库、缓存、异步处理和Web性能优化四大策略,系统性能优化必知必备,大厂面试高频。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
|
1月前
|
SQL 关系型数据库 MySQL
MySQL导入.sql文件后数据库乱码问题
本文分析了导入.sql文件后数据库备注出现乱码的原因,包括字符集不匹配、备注内容编码问题及MySQL版本或配置问题,并提供了详细的解决步骤,如检查和统一字符集设置、修改客户端连接方式、检查MySQL配置等,确保导入过程顺利。
|
29天前
|
SQL 监控 安全
SQL Servers审核提高数据库安全性
SQL Server审核是一种追踪和审查SQL Server上所有活动的机制,旨在检测潜在威胁和漏洞,监控服务器设置的更改。审核日志记录安全问题和数据泄露的详细信息,帮助管理员追踪数据库中的特定活动,确保数据安全和合规性。SQL Server审核分为服务器级和数据库级,涵盖登录、配置变更和数据操作等事件。审核工具如EventLog Analyzer提供实时监控和即时告警,帮助快速响应安全事件。
|
2月前
|
SQL 关系型数据库 MySQL
体验使用DAS实现数据库SQL优化,完成任务可得羊羔绒加厚坐垫!
本实验介绍如何通过数据库自治服务DAS对RDS MySQL高可用实例进行SQL优化,包含购买RDS实例并创建数据库、数据导入、生成并优化慢SQL、执行优化后的SQL语句等实验步骤。完成任务,即可领取羊羔绒加厚坐垫,限量500个,先到先得。
175 12
|
2月前
|
SQL 存储 BI
gbase 8a 数据库 SQL合并类优化——不同数据统计周期合并为一条SQL语句
gbase 8a 数据库 SQL合并类优化——不同数据统计周期合并为一条SQL语句
|
2月前
|
SQL 数据库
gbase 8a 数据库 SQL优化案例-关联顺序优化
gbase 8a 数据库 SQL优化案例-关联顺序优化
|
2月前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第16天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括配置系统源、安装 SQL Server 2019 软件包以及数据库初始化,确保 SQL Server 正常运行。
|
2月前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第8天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统准备、配置安装源、安装 SQL Server 软件包、运行安装程序、初始化数据库以及配置远程连接。通过这些步骤,您可以顺利地在 CentOS 系统上部署和使用 SQL Server 2019。