Oracle for update获得:
1.RS:表级行共享。
2.行级行共享更新,只允许查询不可更新。PS:表级才有共享锁,行级无共享锁。
--个人理解,你自己理解试试。

解决方案 »

  1.   

    1、表行锁。
    2、共享锁(S锁):
    如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排他锁。获准共享锁的事务职能读取数据,不能修改数据。
    排他锁(X锁):
    如果事务T对数据A加上排他锁后,则其他事务不能在对A加任何类型的封锁。获准排他锁的事务既能读取数据,也能修改数据。
    数据库死锁的原因:若干事务相互等待对方释放封锁,就陷入了无限期等待状态,系统进入死锁。
    预防数据库死锁的方法:
    1、要求一个事务必须一次性封锁所需要的所有数据(要么全成功,要么全部成功)
    2、规定封锁数据的顺序,所有事务必须按照这个顺序实行封锁
    解除数据库死锁的方法:允许死锁发生,然后解除它,如果发现死锁,则将其中一个代价较小的事务撤销,回滚这个事务,并释放此事务持有的封锁,使其他事务继续进行。
      

  2.   

    谢谢讲解 - -
    另外请问一下:“如果事务T对数据A加上排他锁,事务T对数据A加上共享锁”这个如何加呢?
    能举个例子么?什么样的操作是加排他锁,什么样的操作是加共享锁?
      

  3.   

    SQL> select * from v$mystat where rownum=1;       SID STATISTIC#      VALUE
    ---------- ---------- ----------
           134          0          1SQL> select * from emp where empno=7788 for update;     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO
    ---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
          7788 SCOTT      ANALYST         7566 19-4月 -87           3000                    20SQL> set linesize 2000
    SQL> select * from v$lock where sid=134;ADDR     KADDR           SID TY        ID1        ID2      LMODE    REQUEST      CTIME      BLOCK
    -------- -------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------
    208344BC 208344D0        134 TO       8706          1          3          0      16778          0
    1FDC4584 1FDC459C        134 TM      51151          0          3          0        113          0
    1FE307AC 1FE308C8        134 TX     131101       9567          6          0      16778          0
    TM:表级锁
    TX:行级排它锁