On 2017/01/21 12:54 PM, Cecil Westerhof wrote:
I have the following (work in progress) table:
CREATE  TABLE desktops(
     name        TEXT    NOT NULL PRIMARY KEY,
     indexNo     INTEGER NOT NULL UNIQUE,
     value       TEXT    NOT NULL UNIQUE,
     waitSeconds INTEGER NOT NULL
);

​I want to insert a record in front of​ the others, so indexNo has to be
increased with one for all records. I would think that this would work:
UPDATE desktops
SET indexNo = indexNo  + 1

But it does not, it gives:
Error: UNIQUE constraint failed: desktops.indexNo

​How can I make this work?

My favourite way (only needed in SQLite as this will work in most other DBs):

UPDATE desktops SET indexNo = -indexNo - 1 WHERE indexNo >= X;
INSERT INTO desktops ... new row for indexNo X ... ;
UPDATE desktops SET indexNo = -indexNo WHERE indexNo < 0;

With X being the indexNo at which you wish to Insert the new row.

I like this because it's simple, quick, and always works without the need to calculate anything. If this table is really big (millions of rows) it /might/ be faster to just drop and recreate the index, you should test the time difference.

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

Reply via email to