Matt Wilson <[EMAIL PROTECTED]> writes:
> On Wed, Sep 01, 2004 at 02:46:39PM +0100, Christian Smith wrote:
>>
>> Add a new "BEGIN [TRANSACTION] FOR READONLY" statement, which begins the
>> transaction with a read lock only and doesn't allow the transaction to
>> even try to promote to a write lock.
>
> Why do you need a transaction at all if you're not going to commit?
If you want to do a series of queries where you require consistent database
state, a transaction allows you to do that. For example:
Time Process 1 Process 2
---------------------------------------------------------------
1 INSERT INTO t1
VALUES (1, 'one');
2 INSERT INTO t2
VALUES ('hello', 'world');
3 SELECT * FROM t2;
4 INSERT INTO t1
VALUES (2, 'two');
5 SELECT * FROM t1;
yields different results than
Time Process 1 Process 2
---------------------------------------------------------------
1 INSERT INTO t1
VALUES (1, 'one');
2 INSERT INTO t2
VALUES ('hello', 'world');
3 BEGIN;
SELECT * FROM t2;
4 INSERT INTO t1
VALUES (2, 'two');
5 SELECT * FROM t1;
END TRANSACTION;
In the latter case, you get the state of t2 and t1 as of time 3, whereas in
the former case, you get the state of the two tables at times 3 and 5,
respectively.
Derrell