总体原则:1)更新的时候一定要加where条件,否则必然引起该字段的所有记录更新
2)跨表更新时,set和where时,尽量减少扫描次数,从而提高优化
update更新实例:
1) 最简单的形式-单表更新
SQL 代码
- --经确认customers表中所有customer_id小于1000均为'北京'
- --1000以内的均是公司走向全国之前的本城市的老客户:)
- update customers
- set city_name='北京'
- where customer_id<1000
2) 两表(多表)关联update -- set为简单的数据(直接是值),且仅在where字句中的连接
SQL 代码
- --这次提取的数据都是VIP,且包括新增的,所以顺便更新客户类别
- update customers a -- 使用别名
- set customer_type='01' --01 为vip,00为普通
- where exists (select 1
- from tmp_cust_city b
- where b.customer_id=a.customer_id
- )
3) 两表(多表)关联update -- 被修改值由另一个表运算而来
SQL 代码
- update customers a -- 使用别名
- set city_name=(select b.city_name from tmp_cust_city b where b.customer_id=a.customer_id)
- where exists (select 1
- from tmp_cust_city b
- where b.customer_id=a.customer_id
- )
-
优化:单个字段的优化,简化为扫描一遍
7.1 SQL 代码
- update customers a -- 使用别名
- set city_name=nvl((select b.city_name from tmp_cust_city b where b.customer_id=a.customer_id),a.city_name)
- -- update 超过2个值(字段)
- update customers a -- 使用别名
- set (city_name,customer_type)=(select b.city_name,b.customer_type
- from tmp_cust_city b
- where b.customer_id=a.customer_id)
- where exists (select 1
- from tmp_cust_city b
- where b.customer_id=a.customer_id
- )
3的缺点,就是对表B进行两遍扫描;
4) 特殊情况的优化:
因为B表的纪录只有A表的20-30%的纪录数,且
A表使用INDEX的情况
使用cursor也许会比关联update带来更好的性能:
SQL 代码
- set serveroutput on
- declare
- cursor city_cur is
- select customer_id,city_name
- from tmp_cust_city
- order by customer_id;
- begin
- for my_cur in city_cur loop
- update customers
- set city_name=my_cur.city_name
- where customer_id=my_cur.customer_id;
- /** 此处也可以单条/分批次提交,避免锁表情况 **/
- -- if mod(city_cur%rowcount,10000)=0 then
- -- dbms_output.put_line('----');
- -- commit;
- -- end if;
- end loop;
- end;
5) 关联update的一个特例以及性能再探讨
在Oracle的update语句语法中,除了可以update表之外,也可以是视图,所以有以下1个特例:
SQL 代码
- update (select a.city_name,b.city_name as new_name
- from customers a,
- tmp_cust_city b
- where b.customer_id=a.customer_id
- )
- set city_name=new_name
这样能避免对B表或其索引的2次扫描,但前提是 A(customer_id) b(customer_id)必需是unique index或primary key
相关推荐
总结,Oracle的多表关联UPDATE语句是一种强大的工具,能够有效处理跨表的数据更新需求,确保数据的一致性和准确性。在实际应用中,应根据业务逻辑和数据关系选择最适合的更新方法,并进行充分的测试以确保其正确性和...
因此,本文总结了在SQL Server、Oracle、MySQL三个数据库系统中update语句更新多表的用法。 一、SQL Server update语句 SQL Server的update语句的基本语法如下: ```sql UPDATE { table_name WITH ( [ ...n ] ) | ...
本文主要总结了在MySQL中进行多表更新的不同SQL语句写法,适用于需要根据一张表中的数据来更新另一张表的情况。 首先,我们可以使用传统的`UPDATE`语句与两张表的简单联接(JOIN)来实现跨表更新。例如,假设有`...
### SQL Server Update 多表 Join 知识点详解 在 SQL Server 中,有时我们需要更新多个表中的数据,尤其是在这些表之间存在某种关联的情况下。本文将详细介绍如何使用 `UPDATE` 语句结合 `JOIN` 来实现对多个表的...
总结来说,MyBatisPlus的条件构造器使得我们能够方便地构建各种条件的更新语句,大大提高了代码的可读性和可维护性。通过UpdateWrapper类,我们可以根据实体对象的属性或自定义条件来执行更新操作,这在处理大量数据...
本篇文章将详细介绍如何根据指定的表结构来生成更新语句(UPDATE SQL),并特别关注基于主键更新的情况。这在Oracle数据库管理与开发中是一项非常实用的技术,尤其对于那些需要频繁更新数据库记录的应用场景来说更是...
- **创建函数**:除了直接在“更新”按钮的Clicked事件中编写代码外,还可以创建一个通用函数`f_updatetable()`来处理多表更新。 - **函数参数**:该函数接收5个参数,包括数据窗口对象、两个表名以及这两个表的主键...
总结来说,`INSERT INTO...ON DUPLICATE KEY UPDATE`是MySQL中一种高效且实用的技巧,能够优雅地处理数据的插入和更新,尤其适用于需要处理并发操作的场景。在实际应用中,应确保正确设置唯一索引,并根据需要调整`...
### 多表更新SQL知识点详解 在数据库管理与开发中,多表更新SQL是一种非常实用且高效的技术,尤其是在处理多个相互关联的表时。本文将详细介绍如何利用SQL语句实现多表更新操作,并通过示例代码来具体说明其应用...
当更新操作涉及到多表关联且逻辑较为复杂时,可以使用PL/SQL的游标(cursor)来进行逐行处理。通过for循环遍历游标中的数据,可以在循环体中执行具体的更新操作。例如: ```sql BEGIN FOR cr IN ( SELECT a....
总结来说,使用Windows Update API获取补丁更新情况列表是一项涉及网络通信、XML解析和异常处理的复杂任务。通过这个过程,开发者可以定制化地管理系统的更新流程,确保系统始终保持最新和安全的状态。
- **定义与作用**:批量更新是指一次性处理多个记录的更新操作,以减少对数据库的调用次数,从而提高程序执行效率。 - **应用场景**:适用于需要频繁更新大量数据的场景,如数据同步、数据分析等。 ##### 2.2 `...
总结,AppUpdate是Android应用进行版本更新管理的强大工具,通过其丰富的功能和开源特性,开发者可以轻松地集成进自己的应用中,提升应用的更新效率和用户体验。同时,参与开源社区的互动,可以进一步优化这个库,使...
这种方法首先创建一个临时表,然后将要更新的记录插入临时表,然后从临时表中 Update 到目标表,例如: ```sql create temporary table tmp (id int(4) primary key, dr varchar(50)); insert into tmp values (0, ...
在MySQL数据库中,更新操作是...总结,MySQL的多表更新功能使得在不同表之间同步数据变得简单,但同时也需要谨慎处理,确保数据的准确性和一致性。理解并熟练运用JOIN和子查询可以帮助你更有效地管理数据库中的数据。
总结来说,INSERT和UPDATE SQL语句是数据库操作的核心,用于添加和修改数据。导出这些语句的目的是为了数据备份、恢复或在不同环境间迁移数据。使用合适的工具或脚本,可以轻松地批量生成这些语句,提高工作效率。而...
本文将详细介绍如何关闭MyEclipse中的“checking for update”自动更新功能。 #### 一、了解MyEclipse的自动更新机制 MyEclipse是一款基于Eclipse平台的增强版IDE,它集成了许多高级特性,如代码编辑、调试、部署...
总结来说,Nexus 5的OTA更新涉及到`update-binary`和`update-script`两个核心组件,它们共同协作完成系统更新的过程。理解这些概念对于Android开发者和高级用户来说非常重要,他们可以借此定制自己的系统更新或修复...