答案是肯定的,是的.Oracle会锁定已修改的行等 - 因此,如果没有行受影响,则不会发生这种情况; 但Oracle还创建了一个subexclusive 表无论锁,其可以或可以不被修改的任何行的,并且它会释放这种锁只在COMMIT或ROLLBACK或等价物.(当然,在这种情况下,您也可以ROLLBACK- 因为没有行受到影响,效果相同).
在以下会话中轻松演示:
SQL> create table xx as
2 select level lvl from dual connect by level <= 5;
Table created.
SQL> select * from xx;
LVL
----------
1
2
3
4
5
SQL> select a.object_name, b.locked_mode
2 from user_objects a join v$locked_object b
3 on a.object_id = b.object_id;
no rows selected
SQL> delete from xx where lvl = 10;
0 rows deleted.
SQL> select a.object_name, b.locked_mode
2 from user_objects a join v$locked_object b
3 on a.object_id = b.object_id;
OBJECT_NAME LOCKED_MODE
--------------- -----------
XX 3
SQL> commit;
Commit complete.
SQL> select a.object_name, b.locked_mode
2 from user_objects a join v$locked_object b
3 on a.object_id = b.object_id;
no rows selected
Run Code Online (Sandbox Code Playgroud)