MySQL Создание таблиц без фиксации текущей транзакции - PullRequest
2 голосов
/ 02 июня 2010

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

См. Заявления, которые вызывают неявную фиксацию на веб-сайте MySQL.

Есть идеи, как мне это сделать?

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

Я только что узнал о " точках сохранения ", но я не совсем понимаю, как / когда его следует использовать, и может ли это помочь мне достичь того, чего я хочу.

1 Ответ

2 голосов
/ 02 июня 2010

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

Некоторые СУБД предоставляют вам полную поддержку транзакций для операторов DDL (язык определения данных), таких как CREATE TABLE. Одним из таких является IBM Informix Dynamic Server.

Многие СУБД не предоставляют вам такой поддержки. Одним из таких является Oracle.

По сути, вы должны решить, лучше ли использовать / поддерживать MySQL и жить без поддержки транзакций вокруг операторов DDL, или переходить на другую СУБД, которая обеспечивает необходимую вам функциональность. Теоретически существует третий вариант - добавить поддержку транзакций вокруг DDL в MySQL. Это может быть немного сложно, хотя (но если вы все сделаете правильно, это будет очень полезно для сообщества MySQL).

...