У меня проблема: мне нужно удалить столбец из моей базы данных SQLite. Я написал этот запрос
alter table table_name drop column column_name
Но это не работает. Пожалуйста, помогите мне.
От: http://www.sqlite.org/faq.html :
(11) Как добавить или удалить столбцы из существующей таблицы в SQLite.
SQLite имеет ограниченную поддержку ALTER TABLE, которую вы можете использовать для добавления столбца в конец таблицы или для изменения имени таблицы. Если вы хотите внести более сложные изменения в структуру таблицы, вам придется воссоздать таблицу. Вы можете сохранить существующие данные во временную таблицу, удалить старую таблицу, создать новую таблицу, а затем скопировать данные обратно из временной таблицы.
Например, предположим, что у вас есть таблица с именем «t1» с именами столбцов «a», «b» и «c», и вы хотите удалить столбец «c» из этой таблицы. Следующие шаги показывают, как это можно сделать:
BEGIN TRANSACTION; CREATE TEMPORARY TABLE t1_backup(a,b); INSERT INTO t1_backup SELECT a,b FROM t1; DROP TABLE t1; CREATE TABLE t1(a,b); INSERT INTO t1 SELECT a,b FROM t1_backup; DROP TABLE t1_backup; COMMIT;
TEMPORARY
изCREATE TABLE
.Вместо того, чтобы отбрасывать резервную копию, просто переименуйте ее ...
источник
t1
.Почему бы для простоты не создать резервную копию таблицы из оператора select?
источник
TEXT
.Этот параметр работает только в том случае, если вы можете открыть БД в браузере БД, например в браузере БД для SQLite .
В браузере БД для SQLite:
источник
=> Создайте новую таблицу напрямую с помощью следующего запроса:
=> Теперь вставьте данные в table_name из existing_table с помощью следующего запроса:
=> Теперь удалите существующую_таблицу по следующему запросу:
источник
Для SQLite3 c ++:
источник
Я сделал функцию Python, в которой вы вводите таблицу и столбец для удаления в качестве аргументов:
Согласно информации об ответах Дуды и MeBigFatGuy, это не сработает, если в таблице есть внешний ключ, но это можно исправить с помощью двух строк кода (создание новой таблицы, а не просто переименование временной таблицы)
источник
Если кому-то нужна (почти) готовая к использованию функция PHP, на этом ответе основано следующее :
В отличие от других ответов, SQL, используемый в этом подходе, похоже, сохраняет типы данных столбцов, тогда как что-то вроде принятого ответа, похоже, приводит к тому, что все столбцы имеют тип
TEXT
.Обновление 1:
Используемый SQL имеет недостаток в том, что
autoincrement
столбцы не сохраняются.источник
На всякий случай, если это поможет кому-то вроде меня.
Основываясь на официальном веб-сайте и принятом ответе , я создал код с использованием C #, который использует пакет NuGet System.Data.SQLite .
Этот код также сохраняет первичный ключ и внешний ключ .
КОД на C #:
источник
Для получения дополнительной информации: https://www.techonthenet.com/sqlite/tables/alter_table.php
источник