Как переименовать столбец в таблице базы данных SQLite? - PullRequest
273 голосов
/ 30 апреля 2009

Мне нужно переименовать несколько столбцов в некоторых таблицах в базе данных SQLite. Я знаю, что подобный вопрос был задан ранее для stackoverflow, но это было для SQL в целом, а случай SQLite не упоминался.

Из документации SQLite для ALTER TABLE я понял, что невозможно сделать это "легко" (т. Е. Одним оператором ALTER TABLE).

Мне было интересно, кто-то знал об общем способе SQL сделать такое с SQLite.

Ответы [ 15 ]

2 голосов
/ 07 апреля 2013

Как уже упоминалось ранее, есть инструмент SQLite Database Browser, который делает это. К счастью, этот инструмент ведет журнал всех операций, выполненных пользователем или приложением. Сделав это один раз и просмотрев журнал приложения, вы увидите соответствующий код. Скопируйте запрос и вставьте по мере необходимости. Работал на меня. Надеюсь, это поможет

1 голос
/ 21 октября 2016

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

например:

alter table TABLE_NAME ADD COLUMN new_column_name TYPE NOT NULL DEFAULT '';
update TABLE_NAME set new_column_name = old_column_name;
update TABLE_NAME set old_column_name = ''; -- abandon old column, basically

Это оставляет за столбцом (и если он был создан с NOT NULL, но без значения по умолчанию, то будущие вставки, игнорирующие его, могут завершиться неудачей), но если это просто одноразовая таблица, компромиссы могут быть приемлемыми. В противном случае используйте один из других упомянутых здесь ответов или другую базу данных, которая позволяет переименовывать столбцы.

0 голосов
/ 22 мая 2019

Случай 1: SQLite 3.25.0 +

Только версия 3.25.0 SQLite поддерживает переименование столбцов. Если ваше устройство отвечает этому требованию, все довольно просто. Следующий запрос решит вашу проблему:

ALTER TABLE "MyTable" RENAME COLUMN "OldColumn" TO "NewColumn";

Случай 2: Более старые версии SQLite

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

Например, если у вас есть такая таблица:

CREATE TABLE student(Name TEXT, Department TEXT, Location TEXT)

А если вы хотите изменить имя столбца Location

Шаг 1: Переименовать исходную таблицу:

ALTER TABLE student RENAME TO student_temp;

Шаг 2: Теперь создайте новую таблицу student с правильным именем столбца:

CREATE TABLE student(Name TEXT, Department TEXT, Address TEXT)

Шаг 3: Скопировать данные из исходной таблицы в новую таблицу:

INSERT INTO student(Name, Department, Address) SELECT Name, Department, Location FROM student_temp;

Примечание. Приведенная выше команда должна состоять из одной строки.

Шаг 4: Оставить исходный стол:

DROP TABLE student_temp;

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

0 голосов
/ 05 апреля 2019

С версии 2018-09-15 (3.25.0) sqlite поддерживает переименование столбцов

https://sqlite.org/changes.html

0 голосов
/ 04 марта 2015

sqlite3 yourdb .dump> /tmp/db.txt
изменить /tmp/db.txt изменить имя столбца в строке Создать
sqlite2 yourdb2 mv / move yourdb2 yourdb

...