mysql: обходить неявные транзакции? - PullRequest
0 голосов
/ 25 января 2011

Я написал инструмент для нашего проекта для применения файлов обновлений sql, которые были зафиксированы, к БД. При каждом запуске (при развертывании) он вычисляет список файлов обновлений, которые необходимо применить, и применяет их в транзакции.

Недавно мне стало известно о проблеме: mysql неявно фиксирует транзакцию всякий раз, когда выполняются операторы DDL (например, create). http://dev.mysql.com/doc/refman/5.0/en/implicit-commit.html

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

Есть ли способ обойти проблему неявных транзакций? То есть Есть ли способ откатить последовательность операторов DDL при сбое одного из них?

Любые другие предложения, как я могу решить проблему?

Спасибо

Gidi

1 Ответ

2 голосов
/ 25 января 2011

Нет.MySQL не поддерживает транзакционный DDL.Вам нужно либо отделить операторы DDL от операторов DML, либо, возможно, попробовать использовать инструмент миграции, например RuckUsing

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