首页 > 代码库 > 演示行级排他锁
演示行级排他锁
update 命令属于 DML语句,事务未提交/回滚时 会产生行级锁。目的是避免其它用户同时修改这个数据。
准备工作:
SQL> create table tt (id number); Table created. SQL> insert into tt values (1); 1 row created. SQL> insert into tt values (2); 1 row created. SQL> commit; Commit complete.
窗口一:
SQL> update tt set id=100 where id=1; 1 row updated.
窗口二:
SQL> update tt set id=1000 where id=1;
光标停在此处不动
这就是行级锁。
在sys用户下查看v$session.
v$session 这个参数可以查看当前会话 通过blocking_session 可以看出 SID=43的会话被 SID=35的会话阻塞;
SQL> select sid,serial#,username,blocking_session from v$session where username=‘HR‘; SID SERIAL# USERNAME BLOCKING_SESSION ---------- ---------- ------------------------------ ---------------- 35 1655 HR 43 6817 HR 35
除了在窗口一下执行commit / rollback 外 还可以在库中执行下面命令 直接kill掉SID=35的会话
SQL> alter system kill session ‘35,1655‘ immediate; System altered.
窗口一
SQL> select * from tt; select * from tt * ERROR at line 1: ORA-03135: connection lost contact Process ID: 19460 Session ID: 35 Serial number: 1655
窗口二
QL> update tt set id=1000 where id=1; 1 row updated. SQL> select * from tt; ID ---------- 1000 2
由于窗口一的会话已经断开,行级锁也就不存在。窗口二update语句得以执行。
演示行级排他锁
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。