Почему вы не можете использовать SQLite ROWID в качестве первичного ключа?

Это не выполняется:

create table TestTable (name text, age integer, primary key (ROWID))

сообщение об ошибке:

11-23 11:05:05.298: ошибка / база данных (31335): Ошибка 1 (Таблица TestTable не имеет столбца с именем ROWID) на 0x2ab378 при подготовке " создать таблицу TestTable (текст имени, целое число возраста, первичный ключ (ROWID))".

однако после создания тестовой таблицы это подготавливает и выполняет просто отлично:

create table TestTable (name text, age integer);

insert into TestTable (name, age) values ('Styler', 27);

select * from TestTable where ROWID=1;

Я потенциально вижу ROWID as решение проблемы автоматического приращения первичного ключа и внешнего ключа, которые никогда не будут использоваться как заполненные данные на уровне приложения. С ROWID скрыто от select результирующие наборы по умолчанию, было бы неплохо связать это с первичным ключом, удерживая ее скрытой от логики приложения. OracleBlog: ROWNUM и ROWID скажите, что это невозможно и нецелесообразно, но не дает много объяснений, кроме этого.

так, поскольку ответ на вопрос "возможно ли это" определенно нецелесообразен, вопрос более или менее "почему бы и нет"?

1 ответов


От SQLite.org:

Если таблица содержит столбец типа INTEGER PRIMARY KEY, то это столбец становится псевдонимом для ROWID. Затем вы можете получить доступ к ROWID используя любое из четырех различных имен, оригинальные три имени описаны выше или имя, данное целочисленному столбцу первичного ключа. Все эти имена являются псевдонимами друг для друга и одинаково хорошо работают в любом контекст.

просто использовать его в качестве первичного ключа.