SQLite Modify Column - PullRequest
       12

SQLite Modify Column

43 голосов
/ 21 апреля 2010

Мне нужно изменить столбец в базе данных SQLite, но я должен сделать это программно из-за того, что база данных уже работает. Из моего исследования я обнаружил, что для этого я должен сделать следующее.

  • Создать новую таблицу с новой схемой
  • Копировать данные из старой таблицы в новую таблицу
  • Оставить старый стол
  • Переименование новой таблицы в имя старой таблицы

Это кажется нелепым трудом для чего-то, что должно быть относительно легким. Есть ли более простой способ? Все, что мне нужно сделать, это изменить ограничение на существующий столбец и присвоить ему значение по умолчанию.

Ответы [ 4 ]

42 голосов
/ 21 апреля 2010

Это один из наиболее известных недостатков SQLite (нет поддержки MODIFY COLUMN на ALTER TABLE), но он входит в список функций SQL, которые SQLite не реализует .

edit: Удален бит, в котором упоминалось, что он может быть поддержан в будущем выпуске, так как страница была обновлена, чтобы указать, что это больше не так

22 голосов
/ 30 апреля 2012

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

echo '.dump' | sqlite3 test.db > test.dump

, затем открыть файлв текстовом редакторе найдите определение, которое вы хотите изменить, а затем:

cat test.dump | sqlite3 new-test.db
8 голосов
/ 21 апреля 2010

Как сказано здесь , эти функции не реализованы в SQLite.

В качестве примечания вы можете сделать два первых шага с помощью таблицы создания с помощью select:

CREATE TABLE tmp_table AS SELECT id, name FROM src_table
1 голос
/ 11 января 2011

Когда я запустил «CREATE TABLE tmp_table AS SELECT id, имя FROM src_table», я потерял все форматирование типа столбца (например, поле времени превратилось в целое поле

Как первоначально заявлено, кажется, что это должно быть проще, но вот что я сделал, чтобы исправить. У меня была эта проблема, потому что я хотел изменить поле Not Null в столбце, и Sqlite там действительно не помогает.

Использование аддонного браузера Firefox 'SQLite Manager' (используйте то, что вам нравится). Я создал новую таблицу, скопировав старый оператор create, внес изменения и выполнил их. Затем, чтобы скопировать данные, я просто выделил строки, R-щелкнул «Копировать строки в качестве SQL», заменил «someTable» именем моей таблицы и выполнил SQL.

...