thank you for valuable comments.

> At least, there should be a pragma or clause similar to the "deferred"
> clause available for foreign keys, causing uniqueness/existence/custom
> constraints to be checked only after FK (=trigger) action.  With such
> feature available, we wouldn't have to sacrifice integrity constraints
> on critical columns.

I hope the feature too.

Could sqlite developers plan to implement it?

2010/4/19 Jean-Christophe Deschamps <j...@q-e-d.org>:
>
>>I found the the restriction of updating unique column in ver3.6.21.
>>and same problem is reported in follwoing mail
>>
>>Marc-Andre Gosselin wrote:
>>date: Thu, 16 Jun 2005
>>title: "[sqlite] Update unique column"
>> >
>> > I discovered a behavior in SQLite 2.8.16 that doesn't conform to
>> the SQL
>> > standard, here's an example :
>> >
>> > CREATE TABLE tbUpdateUnique (a INTEGER PRIMARY KEY, b INTEGER UNIQUE, c
>> > VARCHAR(100));
>> > INSERT INTO tbUpdateUnique VALUES('', 1, "Test 1");
>> > INSERT INTO tbUpdateUnique VALUES('', 2, "Test 2");
>> > INSERT INTO tbUpdateUnique VALUES('', 3, "Test 3");
>> >
>> > Now when I try the following update, I get a constraint error :
>> >
>> > UPDATE tbUpdateUnique SET b = b + 1 WHERE b >= 2;
>> >
>> > In the SQL Standard and NIST SQL test suite they say than an update
>> > should be considered atomic, and verify unique constraints only
>> after the operation has
>> > updated all rows. From what I experienced with SQLite, constraints
>> are verified
>> > after each row has been updated, resulting in a constraint error. I
>> also tried
>> > these with no success :
>> >
>> > BEGIN TRANSACTION;
>> > UPDATE tbUpdateUnique SET b = b + 1 WHERE b >= 2;
>> > COMMIT TRANSACTION;
>> >
>> > and
>> >
>> > UPDATE tbUpdateUnique SET b = b + 1 WHERE a IN (SELECT a FROM
>> tbUpdateUnique
>> > WHERE b >= 2 ORDER BY b DESC);
>> >
>>
>># full mail can be seen in archieve log at
>># http://www.mail-archive.com/sqlite-users@sqlite.org/msg08597.html
>>
>>Will this restriction be fixed in near feature?
>>
>>I also know the workaround to use temporary value and update twice.
>>(example is shown is
>>http://www.mail-archive.com/sqlite-users@sqlite.org/msg50894.html)
>>but I don't want to use this workaround if possible
>>because it is not gut feeling and less performance.
>
> I also have been in the situation where a unique constraint gets raised
> early: while inserting items in a nested tree (using integral LO-HI
> intervals) you have to completely abandon unique constraints on the LO
> and HI keys.  Contrary to what occurs in other engines, SQLite seems to
> assert constraints at insert/delete time, ignoring the fact that
> (insert or delete) trigger will increment or decrement the upper part
> of the tree interval on HI and LO keys (in the case of a nested tree).
>
>
> _______________________________________________
> 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

Reply via email to