Я хочу удалить или добавить столбец в базе данных sqlite
Я использую следующий запрос для удаления столбца.
ALTER TABLE TABLENAME DROP COLUMN COLUMNNAME
Но это дает ошибку
System.Data.SQLite.SQLiteException: SQLite error
near "DROP": syntax error
Ответы:
ALTER TABLE SQLite
Ты можешь:
источник
PRAGMA foreign_keys=OFF
. В этом случае после выполнения этой последовательности необходимо позвонитьPRAGMA foreign_keys=ON
, чтобы повторно включить внешние ключи.RENAME COLUMN
поддерживается. 🎉 sqlite.org/releaselog/3_25_0.htmlЯ написал реализацию Java на основе рекомендованного Sqlite способа сделать это:
Чтобы получить столбец таблицы, я использовал «PRAGMA table_info»:
Я действительно написал об этом в своем блоге, вы можете увидеть больше объяснений там:
http://udinic.wordpress.com/2012/05/09/sqlite-drop-column-support/
источник
INSERT
заявление, вы также можете создать новую таблицу, выполнив"CREAT TABLE" + tableName + "AS SELECT " + columnsSeperated + " FROM " + tableName + "_old;"
Как уже отмечали другие
источник: http://www.sqlite.org/lang_altertable.html
Хотя вы всегда можете создать новую таблицу, а затем отбросить более старую. Я попытаюсь объяснить этот обходной путь на примере.
Теперь вы хотите удалить столбец
height
из этой таблицы.Создайте другую таблицу с именем
new_person
Теперь скопируйте данные из старой таблицы
Теперь бросьте
person
таблицу и переименуйтеnew_person
вperson
Так что теперь, если вы сделаете
.schema
, вы увидитеисточник
CREATE TABLE new_person AS SELECT id, first_name, last_name, age FROM person;
http://www.sqlite.org/lang_altertable.html
Как видно из диаграммы, поддерживается только ADD COLUMN. Однако есть (довольно тяжелый) обходной путь: http://www.sqlite.org/faq.html#q11
источник
Мы не можем удалить конкретный столбец в SQLite 3. См. FAQ .
источник
Как уже отмечали другие,
ALTER TABLE
заявление sqlite не поддерживаетDROP COLUMN
, и стандартный рецепт для этого не сохраняет ограничений и индексов.Вот некоторый код на Python, чтобы сделать это в общем, сохраняя все ключевые ограничения и индексы.
Пожалуйста, сделайте резервную копию вашей базы данных перед использованием!Эта функция полагается на исправление оригинального оператора CREATE TABLE и потенциально немного небезопасна - например, она будет делать неправильные вещи, если идентификатор содержит встроенную запятую или скобку.
Если кто-то захочет предложить лучший способ разбора SQL, это было бы здорово!
ОБНОВЛЕНИЕ Я нашел лучший способ анализа с использованием
sqlparse
пакетас открытым исходным кодом. Если есть интерес, я опубликую его здесь, просто оставьте комментарий с просьбой об этом ...источник
Я переписал ответ @Udinic, чтобы код автоматически генерировал запрос на создание таблицы . Это тоже не нужно
ConnectionSource
. Это также необходимо сделать внутри транзакции .источник
DB Browser для SQLite позволяет добавлять или удалять столбцы.
В главном представлении tab Database Structureнажмите на название таблицы. Включается кнопка Modify Table, которая открывает новое окно, в котором вы можете выбрать столбец / поле и удалить его.
источник
Вы можете использовать Sqlitebrowser. В режиме браузера для соответствующей базы данных и таблицы в структуре tab -database, после опции Modify Table, можно удалить соответствующий столбец.
источник
Я улучшил ответ user2638929, и теперь он может сохранять тип столбца, первичный ключ, значение по умолчанию и т. Д.
PS. Я использовал здесь
android.arch.persistence.db.SupportSQLiteDatabase
, но вы можете легко изменить его для использованияandroid.database.sqlite.SQLiteDatabase
источник
Я думаю, что вы хотите сделать, это миграция базы данных. «Отбрасывание» столбца не существует в SQLite. Однако вы можете добавить дополнительный столбец, используя запрос таблицы ALTER.
источник
Вы можете использовать SQlite Administrator для изменения имен столбцов. Щелкните правой кнопкой мыши по имени таблицы и выберите «Редактировать таблицу». Здесь вы найдете структуру таблицы и сможете легко переименовать ее.
источник
Поскольку SQLite имеет ограниченную поддержку ALTER TABLE, поэтому вы можете только добавить столбец в конце таблицы ИЛИ ИЗМЕНИТЬ TABLE_NAME в SQLite.
Вот лучший ответ, КАК УДАЛИТЬ КОЛОННУ ИЗ SQLITE?
посетите Удалить столбец из таблицы SQLite
источник
Как альтернатива:
Если у вас есть таблица со схемой
Вы можете использовать такое
CREATE TABLE...AS
утверждение, какCREATE TABLE person2 AS SELECT id, first_name, last_name, age FROM person;
, например, опустить столбцы, которые вам не нужны. Затем отбросьте исходнуюperson
таблицу и переименуйте новую.Обратите внимание, что этот метод создает таблицу без PRIMARY KEY и без ограничений. Чтобы сохранить их, используйте методы, описанные другими для создания новой таблицы, или используйте временную таблицу в качестве промежуточной.
источник
Этот ответ на другой вопрос ориентирован на изменение столбца, но я считаю, что часть ответа может также дать полезный подход, если у вас много столбцов и вы не хотите перепечатывать большинство из них вручную для вашего оператора INSERT:
https://stackoverflow.com/a/10385666
Вы можете сбросить базу данных, как описано в приведенной выше ссылке, затем извлечь оператор «создать таблицу» и шаблон «вставить» из этого дампа, а затем следовать инструкциям в разделе часто задаваемых вопросов SQLite «Как добавить или удалить столбцы из существующего таблица в SQLite. " (ЧаВо находится в другом месте на этой странице.)
источник
Реализация
Python
основана на информации на http://www.sqlite.org/faq.html#q11 .Этот скрипт сначала создает случайную временную таблицу и вставляет данные только необходимых столбцов, кроме того, который будет отброшен. Затем восстанавливает исходную таблицу на основе временной таблицы и удаляет временную таблицу.
источник
Мое решение, нужно только вызвать этот метод.
И вспомогательный метод для получения столбцов:
источник
и просто вызвать метод
источник
Теперь вы также можете использовать браузер БД для SQLite для управления столбцами
источник
Пример добавления столбца: -
здесь student - имя_таблицы, а TOB - имя_столбца для добавления.
Это работает и проверено.
источник