Почему вы не можете использовать 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 используя любое из четырех различных имен, оригинальные три имени описаны выше или имя, данное целочисленному столбцу первичного ключа. Все эти имена являются псевдонимами друг для друга и одинаково хорошо работают в любом контекст.
просто использовать его в качестве первичного ключа.