转自:http://blog.itpub.net/25322446/viewspace-767505
说明:笔记总结了在工作中遇到过的几种update方法和各种方法适用的范围。
1.单表更新
方案:使用标准update语法即可,执行稳定且效率较高
update table
set (column1,column2,...)=
value1,value2,...
;
2.多表关联更新
举例:更新gkfq_rec表中所有slid与oa2_ftask表fi_inst相同的行,blzt字段值=oa2_ftask表的ft_lstate。
create table gkfq_rec (
slid char(12) parimary key,
blzt varchar2(50),
wjbt varchar2(100) not null,
........
);
create table oa2_ftask (
fi_inst char(12) parimary key,
fi_state int not null,
ft_lstate int not null,
...
);
方法描述
适用范围
运行效率
传统方案
一般情况适用
单表更新效率高且稳定,多表时效率较慢
inline view更新法
关联字段为主键
速度较快
merge更新法
关联字段非主键,适用于两表关联
非主键关联表更新,速度较快
快速游标更新法
逻辑较复杂的情况
复杂逻辑时效率很高
(1)传统方案(速度可能最慢)
update gkfq_rec a
set blzt=
(select b.ft_lstate from oa2_ftask b where a.slid=b.fi_inst)
where exists
(select 1 from oa2_ftask b where a.slid=b.fi_inst)
;
//子查询返回多行值时,通过where exists条件逐行过滤,一一匹配实现set唯一值
(2)inline view更新法(关联主键字段,速度较快)
方案:更新一个临时建立的视图。要求B表的主键字段必须在where条件中,并且是以=号来关联被更新表,否则可能报错:ORA-01779:无法修改与非键值保存表对应的列。当B表主键字段为多列组合时,也有可能出现这一报错。update (select a.blzt as blzt,b.ft_lstate as ft_lstate
from gkfq_rec a,oa2_ftask b where a.slid=b.fi_inst)
set blzt=ft_lstate
;
(3)merge更新法(关联字段非主键时,速度较快)
语法:
MERGE INTO table_name alias 1
USING (table|view|sub_query) alias 2
ON (join condition)
WHEN MATCHED THEN
UPDATE
SET col1=col_val1,
col2=col_val2
WHEN NOT MATCHED THEN
INSERT (column_list) VALUES (column_values);
方案:在alias2中select出来的数据,每一条都跟alias1进行ON (join condition)比较,若匹配,就进行更新操作,不匹配,执行插入操作。merge不会返回影响行数,且最多只能两表关联,适用于连接条件不是主键的字段。
merge into gkfq_rec a
using oa2_ftask b
on (a.slid=b.fi_inst)
when matched then
update set a.blzt=b.ft_lstate;
(4)快速游标更新法(复杂逻辑时,效率很高)
语法:
begin
for cr in (查询语句) loop --循环
update table_name set ... --更新语句(根据查询出来的结果集合)
end loop; --结束循环
end;
方案:配合oracle独有的内置ROWID物理字段,使用快速游标,不需要定义,直接把游标写到for循环中,快速定位并执行更新。它可以支持复杂逻辑的查询语句,更新准确,无论数据多大更新效率依然很高。但执行后不返回影响行数。
begin
for aa in (select a.rowid as rowid,b.ft_lstate as ft_lstate from gkfq_rec a,oa2_ftask b
where a.slid=b.fi_inst ) loop
update gkfq_rec set blzt=aa.ft_lstate
where rowid=aa.rowid;
end loop;
end;
mysql update改动多条数据
通常情况下,我们会使用下面SQL语句来更新字段值: 复制代码代码例如以下: UPDATE mytable SET myfield='value' WHERE other_field='other_va ...
MySQL插入,更新,删除数据
插入 单行插入 1.insert into 表名 values(col1_value,col2_value,...); 每个列必须提供一个值,如果没有值,要提供NULL值 每个列必须与它在表中定义的次 ...
oracle使用 merge 更新或插入数据
OracleCC++C# 总结下.使用merge比传统的先判断再选择插入或更新快很多. 1)主要功能 提供有条件地更新和插入数据到数据库表中 如果该行存在,执行一个UPDATE操作,如果是一个新行, ...
在oracle中使用merge into实现更新和插入数据
目录 oracle中使用merge into DUAL表解释 使用场景 用法 单表 多表 oracle中使用merge into DUAL表解释 在Oracle数据库中,dual是Oracle中的一个 ...
在UPDATE中更新TOP条数据以及UPDATE更新中使用ORDER BY
正常查询语句中TOP的运用: SELECT TOP 1000 * FROM MP_MemberGrade 随意更新一张表中满足条件的前N条数据: UPDATE TOP (1) MP_Member ...
Oracle一列的多行数据拼成一行显示字符
Oracle一列的多行数据拼成一行显示字符 oracle 提供了两个函数WMSYS.WM_CONCAT 和 ListAgg函数. www.2cto.com 先介绍:WMSYS.WM_CO ...
ASP.NET网页动态添加、更新或删除数据行
ASP.NET网页动态添加.更新或删除数据行 看过此篇 http://www.cnblogs.com/insus/p/3247935.html的网友,也 ...
SQL Server下ADO.NET 怎么获取数据库SQL语句INSERT,UPDATE,DELETE了多少行数据
ADO.NET 在发送SQL语句到SQL Server数据库后,怎么知道真正INSERT,UPDATE,DELETE了多少行数据呢? 使用SQL Server内置的全局变量@@ROWCOUNT即可,@ ...
oracle 分组取第一行数据 ,查询sql语句
oracle 分组取第一行数据 SELECT * FROM ( SELECT ROW_NUMBER() OVER(PARTITION BY x ORDER BY y DESC) rn, t.* FR ...
随机推荐
获取URL最后一个 ‘/’ 之后的字符
在开发项目的过程中,经常遇到需要解析论坛,博客等的URL的问题,比如:'abc/def/jkl' 或 'abc/def/jkl/',获取最后一个‘/’之后的所有字符‘jkl’,由于特殊字符'/'的个数 ...
js--敏感词屏蔽
EXCEL导入(反射)
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import ja ...
Nagios 自定义插件与安装使用之监控dead datanodes
现在我使用nagios来监控hadoop的核心进程,rm,nm,dn,nn,zkfc,jn,zk等,但是有时候进程虽然还在,但是日志不刷新,web ui上可以看到有些datanodes节点已经变为de ...
VC++ AfxBeginThread 与 CreateThread 的区别
简言之:AfxBeginThread是MFC的全局函数,是对CreateThread的封装. CreateThread是Win32 API函数,前者最终要调到后者.具体说来,CreateThre ...
dict和set
#dict和set #dict #Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map #使用键-值(key-value)存储,具有极快的查找速度. #字 ...
HTML5客户端数据存储
HTML5 使在不影响网站性能的情况下存储大量数据成为可能.之前,这些都是由 cookie 完成的,cookie不适合大量数据的存储,因为会影响速度. 举个例子: var obj = {x:1}; / ...
Microsoft Visual Studio 2017 编译最新版 libuv 1.x 并且生成 LIB 和 DLL 两种模式
以为昨天晚上编译通过就可以了,哪知道,早上编译DLL的一车的报错 今天开始逐个解决,终于把引用的问题一亿解决了,具体步骤如下 1 在 Windows 平台下编译出错,显示导出未定义,打开 uv-win ...
h5仿微信聊天(高仿版)、微信聊天表情|对话框|编辑器
之前做过一版h5微信聊天移动端,这段时间闲来无事就整理了下之前项目,又重新在原先的那版基础上升级了下,如是就有了现在的h5仿微信聊天高仿版,新增了微聊.通讯录.探索.我四个模块 左右触摸滑屏切换,聊天 ...
本文总结了Oracle数据库中处理单表和多表更新的常见方法,包括标准更新、视图更新、Merge语句以及快速游标更新。通过案例详细解释了各种方法的适用场景和效率特点,帮助提升数据库操作效率。
745

被折叠的 条评论
为什么被折叠?



