No autoincrement for Integer Primary key in sqlite3

前端 未结 2 983
無奈伤痛
無奈伤痛 2021-02-07 03:24

In the sqlite3 faq, it is mentioned that an integer primary key being fed a null value would autoincrement. But this is not happening for me.

to replicate, a table in sq

2条回答
  •  耶瑟儿~
    2021-02-07 04:22

    This is one of SQLite's quirks. From the fine manual:

    According to the SQL standard, PRIMARY KEY should always imply NOT NULL. Unfortunately, due to a long-standing coding oversight, this is not the case in SQLite. Unless the column is an INTEGER PRIMARY KEY SQLite allows NULL values in a PRIMARY KEY column. We could change SQLite to conform to the standard (and we might do so in the future), but by the time the oversight was discovered, SQLite was in such wide use that we feared breaking legacy code if we fixed the problem.

    The documentation on INTEGER PRIMARY KEY is a little unclear about what precisely is required for a column to be this special INTEGER PRIMARY KEY that auto-increments but the reality is that the column needs to be NOT NULL if you want to use the NULL value to mean "give me the next auto-incrementing value" when inserting:

    create table dummy (
        serial_num integer primary key not null,
        name text
    );
    

    If you leave out the not null, you need to do your inserts like this:

    insert into dummy (name) values (?)
    

    to get the auto-increment value for serial_num. Otherwise, SQLite has no way of telling the difference between a NULL meaning "give me the next auto-increment value" and a NULL meaning "put a NULL value in serial_num because the column allows NULLs".

提交回复
热议问题