Sql中Update的From语句及常见更新操作方式

 更新时间:2024年04月22日 10:04:23   作者:全栈小5  
在SQL中,更新数据是数据库管理中常见且重要的操作之一,本文主要介绍了Sql中Update的From语句及常见更新操作方式,具有一定的参考价值,感兴趣的可以了解一下

前言

最近在做数据修改,有时候太久没写sql语句,突然想通过子查询的方式去批量更新数据的时候,还是有点不知所措,那就一步一步来吧,也写篇文章梳理和总结下,毕竟也是基本的操作加深印象。

常规更新

基于上篇文章的表数据,先查询同城市同区域同姓名存在等于2条的记录,
并将最大编号的那条记录代理商更新为"张三2",城市区县代理商三者分组查询

分组查最大值

select * from test_name
select city_name,area_name,agent_name,max(id) maxId
from test_name 
group by city_name,area_name,agent_name
having count(1)>1

在这里插入图片描述

编号更新

不管任何时候,进行更新操作,一定更要三思,问问自己加了where条件没有,切勿大意经验之谈

update test_name set agent_name='张三2' where id=2
select * from test_name

在这里插入图片描述

查询更新

通过子查询方式更新数据,将上面的数据更新还原,进行下面更新操作

update test_name set agent_name='张三_'+convert(varchar(50),t.maxId)
from(
    select city_name,area_name,agent_name,max(id) maxId
    from test_name 
    group by city_name,area_name,agent_name
    having count(1)>1
) t 
where test_name.id=t.maxId

select * from test_name

在这里插入图片描述

常见更新方式

在 SQL Server 中,更新数据是数据库管理中常见且重要的操作之一。

UPDATE 语句

使用 UPDATE 语句可以直接更新表中的数据。语法如下:

UPDATE table_name
SET column1 = value1, column2 = value2, …
WHERE condition;

这里的 table_name 是你要更新的表名,column1 = value1, column2 = value2, … 是需要更新的列和对应的值,WHERE condition 是更新的条件。

使用子查询更新数据

如前面提到的,可以使用子查询来更新表中的数据,例如将一个表中的列更新为另一个表中的计算结果。

使用 JOIN 更新数据

通过 JOIN 操作,可以根据两个或多个表之间的关系来更新数据。例如,可以使用 INNER JOIN、LEFT JOIN 或其他类型的 JOIN 来更新匹配的数据。

使用临时表进行更新

有时候,可以先将需要更新的数据存储在临时表中,然后再通过 JOIN 或其他方式将其更新回主表。

使用事务进行更新

在更新数据时,尤其是涉及多个表或复杂逻辑时,使用事务可以确保数据的一致性。通过启动事务、提交或回滚事务,可以有效地管理更新操作。

使用触发器进行更新

在某些情况下,可能希望在更新某个表时自动触发另一些操作,这时可以使用触发器来实现。
触发器可以在更新、插入或删除数据时自动执行相关的操作。

无论使用哪种更新数据的方式,都需要谨慎操作,确保更新的数据准确无误。在进行重要的数据更新操作前,务必备份数据以防止意外情况发生。经验之谈,慎之又慎。

常见场景

在 SQL Server 中,批量修改数据是常见的需求之一,特别是在需要同时更新多行记录时。

批量修改数据场景

1.大批量数据更新
当需要更新大量数据时,采用批量更新的方式可以提高效率,减少单独更新每行记录的开销。

2.根据条件批量更新
根据特定条件选择需要更新的数据,可以使用 WHERE 子句来筛选符合条件的记录进行批量更新。

3.使用临时表批量更新
将需要更新的数据存储在临时表中,然后利用临时表与目标表进行 JOIN 更新数据。

4.跨表关联批量更新
在更新数据时,可能需要跨表关联更新数据,可以使用 JOIN 操作或子查询来实现。

需要注意的事项

1.事务处理在批量更新数据时,尤其是跨表更新或更新涉及到重要数据时,建议使用事务进行处理,以确保数据的一致性并能够回滚到之前的状态。

2.性能优化在进行批量更新时,要注意数据库性能,避免锁表或对性能造成影响。可以考虑分批次更新数据、创建索引以提升查询效率等方式进行性能优化。

3.备份数据在进行批量更新操作前,务必备份数据,以防操作失误或更新错误导致数据丢失。

4.避免影响其他操作在更新大量数据时,可能会占用数据库资源,影响其他操作。建议在低负载时段执行批量更新操作,以减少对其他操作的影响。

5.注意更新条件确保更新操作的条件准确,避免将不需要更新的数据一并更新。

到此这篇关于Sql中Update的From语句及常见更新操作方式的文章就介绍到这了,更多相关Sql Update From内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SQLSERVER 临时表和表变量的区别汇总

    SQLSERVER 临时表和表变量的区别汇总

    不管临时表还是表变量都带了表这个词,既然提到表 ,按推理自然会落到某数据库中,如果真在一个数据库中,那自然就有它的存储文件 .mdf和.ldf,那是不是如我推理的那样呢,这篇文章主要介绍了SQLSERVER 临时表和表变量到底有什么区别,需要的朋友可以参考下
    2023-02-02
  • SQLserver 数据库危险存储过程删除与恢复方法

    SQLserver 数据库危险存储过程删除与恢复方法

    SQLserver 数据库危险存储过程删除与恢复方法,有时候是为了安全,也为了以后使用方便
    2011-09-09
  • SQL Server 使用触发器(trigger)发送电子邮件步骤详解

    SQL Server 使用触发器(trigger)发送电子邮件步骤详解

    本文分步骤给大家详细介绍了SQL Server 使用触发器(trigger)发送电子邮件的方法,需要的朋友可以参考下
    2017-04-04
  • SQL Server误区30日谈 第20天 破坏日志备份链之后,需要一个完整备份来重新开始日志链

    SQL Server误区30日谈 第20天 破坏日志备份链之后,需要一个完整备份来重新开始日志链

    事务日志备份会备份自上次事务日志备份以来所有的事务日志(如果从来没有过日志备份的话,那就从上一次完整备份开始)。有好几种类型的操作会中断事务日志的连续性,也就是说除非重新开始新的日志链,SQL Server无法再进行日志备份
    2013-01-01
  • sqlserver 存储过程分页(按多条件排序)

    sqlserver 存储过程分页(按多条件排序)

    sqlserver 存储过程分页,并支持条件排序,需要的朋友可以参考下。
    2010-06-06
  • SQL注入之报错注入的具体使用

    SQL注入之报错注入的具体使用

    报错注入就是利用了数据库的某些机制,人为地制造错误条件,使得查询结果能够出现在错误信息中,主要介绍了SQL注入之报错注入的具体使用,感兴趣的可以了解一下
    2023-08-08
  • Linux下安装SQLServer2019的方法

    Linux下安装SQLServer2019的方法

    这篇文章主要介绍了Linux下安装SQLServer2019的方法,本文通过命令介绍及图文解析给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • SQL查询中出现笛卡尔积现象的解决方法

    SQL查询中出现笛卡尔积现象的解决方法

    本文主要介绍了SQL查询中出现笛卡尔积现象的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • SQL Server 2005 还原数据库错误解决方法

    SQL Server 2005 还原数据库错误解决方法

    解决SQL Server 2005 还原数据库错误:System.Data.SqlClient.SqlError: 在对 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\BusinessDB.mdf' 尝试 'RestoreContainer::ValidateTargetForCreation' 时,操作系统返回了错误 '5(拒绝访问)'
    2009-03-03
  • Sql奇技淫巧之ROWNUM伪列的使用

    Sql奇技淫巧之ROWNUM伪列的使用

    本文主要介绍了Sql奇技淫巧之ROWNUM伪列,ROWNUM是一个伪列,它是根据每次查询的结果动态生成的一列递增编号,下面就一起来介绍一下如何使用把
    2023-08-08

最新评论