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.