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>
>
> 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.
>
> How about
>
> INSERT into Table (a) values (1) where not exists (select * from Table
> where a = 1);
>
> in two separate concurrent transactions?
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