From https://www.sqlite.org/lang_createtable.html : **** ROWIDs and the INTEGER PRIMARY KEY Except for WITHOUT ROWID tables, all rows within SQLite tables have a 64-bit signed integer key that uniquely identifies the row within its table. This integer is usually called the "rowid". The rowid value can be accessed using one of the special case-independent names "`rowid`", "`oid`", or `"_rowid_`" in place of a column name. If a table contains a user defined column named "`rowid`", "`oid`" or "`_rowid_`", then that name always refers the explicitly declared column and cannot be used to retrieve the integer rowid value. **** In short, you've already got a row id in the table. And, unless the table also has 3 columns named `rowid`, `oid`, and `_rowid_`, that row id is accessible to your code.