tags:

views:

2048

answers:

3

How can I set the start value for an AUTOINCREMENT field in SQLite?

+3  A: 

Explicitly insert the value-1 into the table, then delete the row.

dave mankoff
I suppose this is the best way to do it, but it's not pretty.
Christian Davén
+3  A: 

One way to do it is to insert the first row specifying explicitly the row id you want to start with. SQLite will then insert row ids that are higher than the previous highest.

jle
+4  A: 

From the SQLite web site:

SQLite keeps track of the largest ROWID that a table has ever held using the special SQLITE_SEQUENCE table. The SQLITE_SEQUENCE table is created and initialized automatically whenever a normal table that contains an AUTOINCREMENT column is created. The content of the SQLITE_SEQUENCE table can be modified using ordinary UPDATE, INSERT, and DELETE statements. But making modifications to this table will likely perturb the AUTOINCREMENT key generation algorithm. Make sure you know what you are doing before you undertake such changes.

I tried this, and it works:

UPDATE SQLITE_SEQUENCE SET seq = <n> WHERE name = '<table>'

Where n+1 is the next ROWID you want and table is the table name.

Could this be dangerous to the integrity of my database?

Christian Davén
Not sure, as I'm not sure how sqlite internals works. It's worth noting that jle and my suggestions above are how PHP's MDB2 library suppports altering the id. Take a look at their sqlite driver source: http://cvs.php.net/viewvc.cgi/pear/MDB2/MDB2/Driver/sqlite.php?view=markup
dave mankoff