迟到_啦 2020-09-09 09:59 采纳率: 0%
浏览 101

plsql中执行一个DML操作(insert),此时查看该表已加锁,然后又执行一次DML操作(update/insert),发现还是能正常执行,没有理解锁表对DML的限制是在何种情况出现

问题:

plsql中执行一个DML操作(insert),此时查看该表已加锁,然后又执行一次DML操作(update/insert),发现还是能正常执行,没有理解锁表对DML的限制是在何种情况出现

测试:

1、create table test(name varchar2(100));

2、insert into test values('database1');
图片说明

3、

select t2.username,
       t2.sid,
       t2.serial#,
       t3.object_name,
       t2.OSUSER,
       t2.MACHINE,
       t2.PROGRAM,
       t2.LOGON_TIME,
       t2.COMMAND,
       t2.LOCKWAIT,
       t2.SADDR,
       t2.PADDR,
       t2.TADDR,
       t2.SQL_ADDRESS,
       t1.LOCKED_MODE
  from v$locked_object t1, v$session t2, dba_objects t3
 where t1.session_id = t2.sid
   and t1.object_id = t3.object_id
 order by t2.logon_time;

图片说明

4、再次执行update,可以执行

update test set name = 'after'where name = 'database1';

图片说明
5、此时若执行DDL语句,也可以执行

truncate table test;

图片说明

疑惑:

1、何种情况下的锁表,会限制DML和DDL语句的执行?

2、在存在锁表的情况下,是否一定会限制DML操作(除select),还是有其他说法,比如数据量小的时候,不会限制?

3、执行一个DML语句(除select),不进行commit操作,这种锁表的影响怎么体现呢(或者有什么建议的测试方法,我自己验证下更好^_^)

  • 写回答

1条回答 默认 最新

  • 脑子进水养啥鱼? 2020-09-09 11:28
    关注

    一个窗口修改一条数据不提交,再另开一个窗口再修改这条数据试试。然后一个窗口执行select * from test for update;不提交,另开一个窗口对test表执行DML操作试试。 理解下行级锁和表级锁。

    评论

报告相同问题?

悬赏问题

  • ¥15 各位请问平行检验趋势图这样要怎么调整?说标准差差异太大了
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 wpf界面一直接收PLC给过来的信号,导致UI界面操作起来会卡顿
  • ¥15 init i2c:2 freq:100000[MAIXPY]: find ov2640[MAIXPY]: find ov sensor是main文件哪里有问题吗
  • ¥15 运动想象脑电信号数据集.vhdr
  • ¥15 三因素重复测量数据R语句编写,不存在交互作用
  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab