oracle中多个进程可以使用merge into语句对同一个表操作不,能锁表吗
2个回答
展开全部
您好,这样的:
会对表加3号锁,会对更新的记录行加6号锁,所以,如果多个进程所更新的不是表中的同一行记录,
不会形成你所理解的锁表(其它进程要等某一进程先提交或回滚)。
Merge不一定锁表,前提要看你怎么写,即使不用merge,在一个大表且没有任何索引的情况下update数据,也有可能锁表:
SET IDENTITY_INSERT TargetTable OFF;
SET NOCOUNT ON
merge TargetTable t
using SourceTable s
on t.ff1=s.ff1
when not matched
then insert values(s.ff2)
--when matched and t.ff2='delete'
--then delete
when matched
then update set t.ff2=s.ff2;
应该怎么改呢,由于是测试,只有主键聚集索引。
我在100万行的数据量下进行了测试,使用update数据的话只有行锁。
会对表加3号锁,会对更新的记录行加6号锁,所以,如果多个进程所更新的不是表中的同一行记录,
不会形成你所理解的锁表(其它进程要等某一进程先提交或回滚)。
Merge不一定锁表,前提要看你怎么写,即使不用merge,在一个大表且没有任何索引的情况下update数据,也有可能锁表:
SET IDENTITY_INSERT TargetTable OFF;
SET NOCOUNT ON
merge TargetTable t
using SourceTable s
on t.ff1=s.ff1
when not matched
then insert values(s.ff2)
--when matched and t.ff2='delete'
--then delete
when matched
then update set t.ff2=s.ff2;
应该怎么改呢,由于是测试,只有主键聚集索引。
我在100万行的数据量下进行了测试,使用update数据的话只有行锁。
2016-03-05 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
关注
展开全部
oracle中多个进程可以使用merge into语句对同一个表操作会引起行级的锁定,但是会引起整个表对象的锁定,只有当所有的执行都完成才会释放。
oracle merge into 的用法详解+实例
作用:merge into 解决用B表跟新A表数据,如果A表中没有,则把B表的数据插入A表;
语法:
MERGE INTO [your table-name] [rename your table here]
USING ( [write your query here] )[rename your query-sql and using just like a table]
ON ([conditional expression here] AND [...]...)
WHEN MATHED THEN [here you can execute some update sql or something else ]
WHEN NOT MATHED THEN
---------------------实例----------------------------------
merge into tfa_alarm_act_nms a
using (select FP0,FP1,FP2,FP3,REDEFINE_SEVERITY
from tfa_alarm_status) b
on (a.fp0=b.fp0 and a.fp1=b.fp1 and a.fp2=b.fp2 and a.fp3=b.fp3)
when matched then update set a.redefine_severity=b.redefine_severity
when not matched then insert (a.fp0,a.fp1,a.fp2,a.fp3,a.org_severity,a.redefine_severity,a.event_time
,a.int_id)
values (b.fp0,b.fp1,b.fp2,b.fp3,b.REDEFINE_SEVERITY,b.redefine_severity,sysdate,7777778);
作用:利用表 tfa_alarm_status跟新表tfa_alarm_act_nms 的b.redefine_severity,条件是a.fp0=b.fp0 and a.fp1=b.fp1 and a.fp2=b.fp2 and a.fp3=b.fp3,如果tfa_alarm_act_nms表中没有该条件的数据就插入。
oracle merge into 的用法详解+实例
作用:merge into 解决用B表跟新A表数据,如果A表中没有,则把B表的数据插入A表;
语法:
MERGE INTO [your table-name] [rename your table here]
USING ( [write your query here] )[rename your query-sql and using just like a table]
ON ([conditional expression here] AND [...]...)
WHEN MATHED THEN [here you can execute some update sql or something else ]
WHEN NOT MATHED THEN
---------------------实例----------------------------------
merge into tfa_alarm_act_nms a
using (select FP0,FP1,FP2,FP3,REDEFINE_SEVERITY
from tfa_alarm_status) b
on (a.fp0=b.fp0 and a.fp1=b.fp1 and a.fp2=b.fp2 and a.fp3=b.fp3)
when matched then update set a.redefine_severity=b.redefine_severity
when not matched then insert (a.fp0,a.fp1,a.fp2,a.fp3,a.org_severity,a.redefine_severity,a.event_time
,a.int_id)
values (b.fp0,b.fp1,b.fp2,b.fp3,b.REDEFINE_SEVERITY,b.redefine_severity,sysdate,7777778);
作用:利用表 tfa_alarm_status跟新表tfa_alarm_act_nms 的b.redefine_severity,条件是a.fp0=b.fp0 and a.fp1=b.fp1 and a.fp2=b.fp2 and a.fp3=b.fp3,如果tfa_alarm_act_nms表中没有该条件的数据就插入。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询