SQLite3 и неявный rowid's - PullRequest
       5

SQLite3 и неявный rowid's

1 голос
/ 15 января 2010

SQLite3 дает вам первичный ключ по умолчанию, называемый rowid для каждой таблицы, если вы не указали первичный ключ. Тем не менее, похоже, что есть некоторые недостатки, чтобы полагаться на это:

Команда VACUUM может изменить ROWID записей в таблицах, которые не имеют явного INTEGER PRIMARY KEY.

http://www.sqlite.org/lang_vacuum.html

Я хочу изменить существующую базу данных SQLite3 для использования явных первичных ключей, а не неявных rowid, чтобы у меня была возможность запускать вакуум при необходимости. Могу ли я сделать это без перестройки всей базы данных?

1 Ответ

1 голос
/ 15 января 2010

Вам не нужно перестраивать всю базу данных. Однако, поскольку SQLite не поддерживает операторы ALTER TABLE, вам необходимо:

  1. создать временную таблицу с правильной схемой
  2. скопировать все данные из исходной таблицы во временную таблицу
  3. удалить исходную таблицу
  4. переименовать временную таблицу

Я предлагаю вам использовать приложение, такое как SQLiteman , чтобы сделать это для вас.

...