Re: computational model of transactions

From: Bob Badour <bbadour_at_pei.sympatico.ca>
Date: Sun, 06 Aug 2006 12:49:54 GMT
Message-ID: <SzlBg.35718$pu3.465255_at_ursa-nb00s0.nbnet.nb.ca>


Marshall wrote:
> Brian Selzer wrote:
>

>>A compiler can tell the difference between x = 10 and x = x + 5, why can't a
>>dbms?

>
> A fair question.
>
> It seems to me easy enough to tell if an UPDATE statement references
> any attributes on the right side of the equals sign.

x = ( select t2.x + 5 from sametable t2 where /* same row */ ...)

>>The system should be able to detect whether or not the new value depends on
>>the previous value.  The first UPDATE statement above does not, the second
>>does.
>>
>>As an aside, it is not really necessary that the system detect this: but the
>>developer must, because in a concurrent environment the difference in the
>>semantics of replacement and modification has ramifications that can affect
>>the appropriate choice of transaction isolation level.
>>
>>>While we're talking manipulations: what about
>>>INSERT and DELETE?  Are there variants of
>>>those, too?  Are those supposed to be handled
>>>differently in transaction context?
>>>
>>
>>I haven't given this much attention, but at first glance, no, I don't think
>>so.

>
> How about
>
> INSERT into Table (a) values (1) where not exists (select * from Table
> where a = 1);
>
> in two separate concurrent transactions?

How about: Delete from table a where id = 1 and x = 2; insert into table a values (id=1, x = 7); ? Received on Sun Aug 06 2006 - 14:49:54 CEST

Original text of this message