数据库中常用功能无外乎增、删、改、查。
我们来讨论下各种语句在并发上的表现
单就表考虑:
SELECT: 只查不改,基本无法阻止只有权限可以阻止
INSERT: 表级独占锁可以阻塞
UPDATE、DELETE 行级锁就可以阻塞
但是在表上加上索引以后情况会发生些许改变
SQL> create table test_insert (c1 number primary key) ;
Table created.
session A进行插入操作
session_A >insert into test_insert values (1);
1 row created.
session_A >
session B进行插入操作
session_B >conn dao/dao
Connected.
session_B >insert into test_insert values (1);
session B直接被阻塞
查询下锁的情况
SQL> set linesize 200
SQL> SELECT DECODE(request,0,'Holder: ','Waiter: ')||sid sess,
2 id1, id2, lmode, request, type
3 FROM V$LOCK
4 WHERE (id1, id2, type) IN
5 (SELECT id1, id2, type FROM V$LOCK WHERE request>0)
6 ORDER BY id1, request;
SESS ID1 ID2 LMODE REQUEST TY
----------------------- ---------- ---------- ---------- ---------- --
Holder: 151 131119 445 6 0 TX
Waiter: 150 131119 445 0 4 TX