I was talking about this example by
2009/9/19 Igor Tandetnik <itandet...@mvps.org>
"Imagine the
classic example, where a transaction first verifies that the balance in
a bank account is sufficient, then performs a withdrawal. If it
relinquishes all locks between these two steps, then somebody else may
record a withdrawal from that account, so that the write operation would
then make the balance negative, thus violating an invariant."

What I want to say is in this example, there should be only one step,
because the transaction knows it will do 'write'.
Then the txn should start a write lock before the select.

And this is not a good example to explain dead lock, I think.


2009/9/19 Pavel Ivanov <paiva...@gmail.com>

> Wenbo, are you talking about what do you want to see in DBMS or are
> you trying to explain how SQLite works?
> If the latter then you're wrong. In SQLite 'read lock' is designed for
> transaction that _made_ any reads, 'write lock' - for transaction that
> _made_ any writes.
>
> Pavel
>
> On Sat, Sep 19, 2009 at 12:18 AM, Wenbo Zhao <zha...@gmail.com> wrote:
> > This is not a good example i think.
> > If a transaction is intent to update after the select, it should start
> > a write lock before the select.
> > And as described in previous 'dead lock' example, the update in this
> > example could fail due to 'dead lock'
> > I believe the 'read lock' is designed for a 'read only' transaction,
> > and the 'write lock' is for a transaction that 'may write something'.
> >
> > 2009/9/19 Igor Tandetnik <itandet...@mvps.org>
> >
> >> Angus March <an...@uducat.com> wrote:
> >> >    Yes, I see. So what is key to the problem is that someone tries to
> >> > change their read lock to a write lock. I guess I just thought that
> >> > the kernel that manages fcntl() would have a way of dealing with
> >> > this. Can this situation not be averted if at step 3, transaction A
> >> > releases its read lock before requesting a write lock?
> >>
> >> Then it wouldn't be much of a transaction, now would it? Imagine the
> >> classic example, where a transaction first verifies that the balance in
> >> a bank account is sufficient, then performs a withdrawal. If it
> >> relinquishes all locks between these two steps, then somebody else may
> >> record a withdrawal from that account, so that the write operation would
> >> then make the balance negative, thus violating an invariant.
> >>
> >> Of course, if that's what the application wants, it can simply perform
> >> the read and the write operations in two separate transactions.
> >>
> >> Igor Tandetnik
> >>
> >>
> >>
> >> _______________________________________________
> >> sqlite-users mailing list
> >> sqlite-users@sqlite.org
> >> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
> >>
> >
> >
> >
> > --
> >
> > Best Regards,
> > ZHAO, Wenbo
> >
> > =======================
> > _______________________________________________
> > sqlite-users mailing list
> > sqlite-users@sqlite.org
> > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
> >
> _______________________________________________
> sqlite-users mailing list
> sqlite-users@sqlite.org
> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
>



-- 

Best Regards,
ZHAO, Wenbo

=======================
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to