SQLite3: Как изменить тип файла без потери данных - PullRequest
4 голосов
/ 02 марта 2012

В моем проекте я использую базу данных sqlite, к сожалению, мой друг допустил ошибку. Поле не имеет правильного типа. Таким образом, на момент, когда данные в поле «localid» (объявляемые как целое число) больше 2147483647, для всей записи в этом поле устанавливается максимум 2147483647.

Запрос sql alter table / alter column не работает с sqlite, поскольку он поддерживает ограниченное подмножество ALTER TABLE: только переименовывать и добавлять новый столбец.

Так как я могу внести изменения без потери данных? правильно создать новую базу данных, скопировать в нее все данные и удалить старую?

Но, может быть, есть лучший способ? У кого-нибудь есть идея?

1 Ответ

2 голосов
/ 02 марта 2012

Действуйте следующим образом:

  1. создайте временную таблицу, содержащую поля, которые формируют первичный ключ и localid (я полагаю, это не PK).
  2. заполните временную таблицу
  3. удалить старый столбец
  4. добавить новый столбец
  5. заполнить новый столбец, выбрав во временной таблице (+ возможное преобразование в новый тип).

Незабудьте о возможных внешних ключах, если столбец используется как таковой, и запомните возможность временного ослабления ограничения, если оно делает преобразование гладким (вероятно, не требуется в вашем случае).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...