On 16 Nov 2015, at 12:24am, Randy Eels <randyeels at gmail.com> wrote:

> My main question is: is an 'INTEGER PRIMARY KEY' column guaranteed not to
> change, except as a consequence of ordinary UPDATE statements? (And in
> particular, not as a consequence of a 'vacuum' statement.)

Values in the rowid column (which has a number of other names) can change only 
if that columns is not aliased by the table definition.  Declaring a named 
column as 'INTEGER PRIMARY KEY' counts as an alias.

> I'd also thank further explanation as to why the 'vacuum' statement doesn't
> change 'rowid's when an explicit 'INTEGER PRIMARY KEY' is declared.

If you declare your own column as being INTEGER PRIMARY KEY, the rowid will not 
change by anything SQLite does automatically.  This is because SQLite knows 
that you know what the column is called, so it thinks you might be relying on 
its values.

The programmer can still change rowid by explicitly updating it, or any column 
aliased to it, using an UPDATE command.

Simon.

Reply via email to