楼主早上好。
你的理解有点儿不对的地方。
加锁是针对事务来说的,不是针对某个SQL语句来说的。
你把不同的SQL写到了同一个存储过程中,在一个session中顺次实现,也就是在同一个事务中进行的,只能说“这个事”务把表或者行加了锁,但是因为SQL都是在这个事务中,不会去竞争他们共有的这个锁;
而如果此时,你再在其他窗口登录了数据库,有了第2个Session(第2个事务),再对这张表进行操作,那么这个新的事务,才会去竞争第1个事务的锁,才会产生你说的“被锁住”的现象。
你的理解有点儿不对的地方。
加锁是针对事务来说的,不是针对某个SQL语句来说的。
你把不同的SQL写到了同一个存储过程中,在一个session中顺次实现,也就是在同一个事务中进行的,只能说“这个事”务把表或者行加了锁,但是因为SQL都是在这个事务中,不会去竞争他们共有的这个锁;
而如果此时,你再在其他窗口登录了数据库,有了第2个Session(第2个事务),再对这张表进行操作,那么这个新的事务,才会去竞争第1个事务的锁,才会产生你说的“被锁住”的现象。
begin
-- Call the procedure
test;
end;create or replace procedure test
is
begin
insert into tb
select 1 from dual;update tb set id=2 where id=1;
end;