Hi,

I have an application where a table has an unique not null int field which
identifies the records. I would like to use this column as a primary key.

However, the value has a meaning from the application point of view. There
should never be a record inserted into this table with some default
(random/autoincrement) value filled in automatically by the database.


Is there a way in sqlite to ensure (on the database side) that all inserts
for such a table have to have explicit values for such a column?

Example:
    CREATE TABLE example_table
    (
        id INTEGER PRIMARY KEY,
        description TEXT NOT NULL
    );
I want
    INSERT INTO example_table (description) VALUES ('abc');
to fail with an error, and
    INSERT INTO example_table (id, description) VALUES (5, 'abc');
to succeed.

Is it at all possible?

For example, defining a trigger before insert and checking that NEW.id IS
NULL does not work - in before trigger the row has already the field value
(automatically) filled in.

PS: If it's not possible I will end up with a table like
    CREATE TABLE example_table
    (
        id INTEGER PRIMARY KEY,
        value INTEGER UNIQUE NOT NULL,
        description TEXT NOT NULL
    );
with and value being meaningful from the application point of view and id
being internal/artificial. But: I would rather avoid such an additional
artificial column...

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

Reply via email to