For a RowID table the RowID *IS* the primary key and there is absolutely nothing you or anyone else can do about it. This is simply the way it works. Deal with it. Other than an INTEGER PRIMARY KEY (which is an explicit declaration of the RowID) the phrase "PRIMARY KEY" is absolutely nothing more than an alternate way of spelling UNIQUE. So, your declarations would be: CREATE TABLE IF NOT EXISTS translatables(id INTEGER PRIMARY KEY, translationTextId TEXT UNIQUE NOT NULL CHECK (translationTextId != ''), screenId TEXT, defaultText TEXT); Mutatis mutandis your other tables.