You might get a table lock when scanning the whole table (as a select
without a predicate will do).  However, this query would not succeed
even if row locking was used, since the scan would be blocked by the
lock on (c,d).  

Except when using 'read uncommitted' isolation level, a query will be
blocked when it encounters a row with uncommitted changes.

-- 
Øystein

>>>>> "MS" == Mehran Sowdaey <[EMAIL PROTECTED]> writes:

    MS> The actual default behavior that we see is table level locking when
    MS> autocommit is turned off not row level locking. Simple test:

    MS> Before lock:

    MS> Session 1, and Session 2 can see this row:
    ij> select * from mscolor;
    MS> COL1      |COL2
    MS> ---------------------
    MS> a         |b

    MS> 1 rows selected
    ij> 



    MS> After lock:

    MS> Session 1:
    ij> autocommit off;
    ij> insert into mscolor values ('c', 'd');
    MS> 1 row inserted/updated/deleted
    ij> 

    MS> Session 2:

    ij> select * from mscolor;
    MS> COL1      |COL2
    MS> ---------------------
    MS> ERROR 40XL1: A lock could not be obtained within the time requested
    ij> 


    MS> Session 2 can not see anything until session 1 commits or rolls back.

Reply via email to