1 (edited by pavlenko.vladimir.v 2023-10-30 18:38:36)

Topic: переименовать поле в таблицы SQL запросам

Я хотел поменять имена нескольких полей SQL запросам
но ват так не вышло

SQLExecute('ALTER TABLE unionSerieToBooks RENAME COLUMN id_series TO id_serie');

Я полез в сеть и наткнулся на пост, в котором утверждалось что изменить имя поля путем запроса можно только начиная с версии SQLite 3.25
Но ведь когда мы работаем с проектом, имена полей меняются.

Помогите сменить имя поля, пожалуйста !

2 (edited by sparrow 2023-10-30 20:05:45)

Re: переименовать поле в таблицы SQL запросам

А вы разве не замечали таблицы ...OLD... в менеджере баз данных?


The old way to rename column

SQLite did not support the ALTER TABLE RENAME COLUMN syntax before version 3.25.0.

If you’re using the SQLite with the version lower than 3.25.0 and could not upgrade, then you should follow these steps to rename a column:

    First, start a transaction.
    Second, create a new table whose structure is the same as the original one except for the column that you want to rename.
    Third, copy data from the original table to the new table.
    Fourth, drop the original table.
    Fifth, rename the new table to the original table.
    Finally, commit the transaction.


можно и не удалять При удалении VACUUM желательно Освободить место.
Отсюда с примером https://www.sqlitetutorial.net/sqlite-rename-column/ В нижней части.

Re: переименовать поле в таблицы SQL запросам

sparrow wrote:

А вы разве не замечали таблицы ...OLD... в менеджере баз данных?


The old way to rename column

SQLite did not support the ALTER TABLE RENAME COLUMN syntax before version 3.25.0.

If you’re using the SQLite with the version lower than 3.25.0 and could not upgrade, then you should follow these steps to rename a column:

    First, start a transaction.
    Second, create a new table whose structure is the same as the original one except for the column that you want to rename.
    Third, copy data from the original table to the new table.
    Fourth, drop the original table.
    Fifth, rename the new table to the original table.
    Finally, commit the transaction.


Можно и не удалять При удалении VACUUM желательно Освободить место.
Отсюда с примером https://www.sqlitetutorial.net/sqlite-rename-column/ В нижней части.

Понял, спасибо!
Транзакция должна создать какой-то временный кеш  и использовать его для капирования данных? Если нет, то может в таком случае использовать простое капирование БД?

Re: переименовать поле в таблицы SQL запросам

Давайте уточним в какой программе вы хотите это сделать (менеджер баз данных или другое).

Re: переименовать поле в таблицы SQL запросам

0. Начать транзакцию
1. Создать новую таблицу, в которой есть новое поле, но нет старого
2. Скопировать данные из старой таблицы в новую
3. Удалить старую таблицу
4. Переименовать новую таблицу в имя старой таблицы
5. Завершить транзакцию.

Транзакцию можете не трогать, если в монопольном доступе работаете. Копировать нужно не базу, а таблицу, одним SQL-запросом INSERT ... SELECT (см. пример)

Визуальное программирование: блог и телеграм-канал.

Re: переименовать поле в таблицы SQL запросам

CREATE TABLE "dd_new" (
  "id" INTEGER PRIMARY KEY AUTOINCREMENT,
  "dat" TEXT,
  "wwQ" TEXT
);

INSERT INTO dd_new SELECT * FROM dd

ALTER TABLE dd 
RENAME TO dd_old;

ALTER TABLE dd_new 
RENAME TO dd;

Re: переименовать поле в таблицы SQL запросам

Всем спасибо, я все понял.
Транзакция либо выполняет все действия единовременно, тем самым гарантирует выполнение всех запросов одним покетом, либо в случае ошибки не выполняет вообще ни каких операций