SQL отбросить столбец, который был создан во время той же транзакции? - PullRequest
0 голосов
/ 01 сентября 2018

Я использую транзакцию для внесения изменений в мою базу данных. Таким образом, если что-то не получится во время изменений, я могу откатиться без какого-либо вреда.

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

Пример:

START TRANSACTION;
    ALTER TABLE "servers" ADD COLUMN "test" INTEGER NOT NULL;
    ALTER TABLE "servers" DROP COLUMN "test";
COMMIT;

Когда я запускаю это, я получаю что-то вроде

column "test" in the middle of being added, try again later

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

Мне кажется, стоит отметить, что запросы, выполняемые внутри транзакции, генерируются с использованием Eloquent ORM Blueprints.

1 Ответ

0 голосов
/ 02 сентября 2018

MySQL не поддерживает изменения таблиц в транзакциях. Из документации :

Некоторые операторы не могут быть отменены. Как правило, они включают в себя операторы языка определения данных (DDL), такие как те, которые создают или отбрасывают базы данных, те, которые создают, отбрасывают или изменяют таблицы или хранимые подпрограммы.

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