2) - insert into t1 where C=c
   - if insert fails, select id from t1 where C=c
   - if insert succeeds, get identity column from last insert, id
   - insert row with column value of id into second table

this would seem to be subject to the row being deleted between the insert

attempt and the select.

Bernt M. Johnsen wrote
Not if you wrap this in a transaction with the proper isolation level.

Bernt, thanks for the response.  I'm obviously new to writing database
applications like this so bear with me.  I've been trying to get my head
around the isolation
levels supported by Derby and all of their implications.  It would seem to
me that perhaps REPEATABLE READ might do the trick here.  Perhaps you could
validate my logic:

If REPEATABLE READ is in effect, then no other transaction would be able to
delete the row between the insert and the select because this would result
in
different results for the select statement if it were repeated.  For
example, the first execution of the select might return a row (if it
existed) but a second execution
of the same select statement might return 0 results if a delete was allowed
to sneak in before the select was executed.  Is this correct?

Thanks,
Ace.

Reply via email to