SQLite Modify Column
Мне нужно изменить столбец в базе данных SQLite, но я должен сделать это программно из-за базы данных, которая уже находится в производстве. Из моих исследований я обнаружил, что для этого я должен сделать следующее.
- Создать новую таблицу с новой схемой
- Скопировать данные из старой таблицы в новую таблицу
- Удалить старую таблицу
- Переименовать новую таблицу в имена старых таблиц
Это похоже на смехотворную работу для чего-то, что должно быть относительно легко. Нет ли более простого способа? Все, что мне нужно сделать, это изменить ограничение на существующий столбец и присвоить ему значение по умолчанию.
Ответы
Ответ 1
Это один из наиболее известных недостатков SQLite (поддержка MODIFY COLUMN
на ALTER TABLE
), но он находится в списке функций SQL, которые SQLite не реализует.
edit: удаленный бит, который упоминал, что он может поддерживаться в будущей версии, когда страница была обновлена, чтобы указать, что это уже не так.
Ответ 2
Если модификация не слишком велика (например, измените длину varchar), вы можете сбросить db, вручную изменить определение базы данных и снова импортировать ее:
echo '.dump' | sqlite3 test.db > test.dump
затем откройте файл текстовым редактором, найдите определение, которое хотите изменить, и затем:
cat test.dump | sqlite3 new-test.db
Ответ 3
Как сказано здесь, эти функции не реализованы SQLite.
В качестве дополнительной заметки вы можете сделать два своих первых шага с помощью таблицы create с выбором:
CREATE TABLE tmp_table AS SELECT id, name FROM src_table
Ответ 4
Когда я запускал "CREATE TABLE tmp_table AS SELECT id, имя FROM src_table", я потерял все форматирование типа столбца (например, поле времени, преобразованное в целочисленное поле
Как изначально заявлено, похоже, что это должно быть проще, но вот что я сделал, чтобы исправить. У меня была эта проблема b/c, я хотел изменить поле Not Null в столбце, а Sqlite действительно не помогает.
Использование браузера браузера Firefox SQLite Manager (используйте то, что вам нравится). Я создал новую таблицу, скопировав старый оператор create, внеся свою модификацию и выполнив ее. Затем, чтобы скопировать данные, я просто выделил строки, R-щелчок "Копировать строки (строки) в виде SQL", заменил "someTable" на мое имя таблицы и выполнил SQL.