Транзакционный с ALTER TABLE. Как реализовать? - PullRequest
1 голос
/ 21 января 2020

Есть несколько групп запросов, которые включают создание таблиц, полей и т. Д. c. Как реализовать механизм, с помощью которого должна выполняться вся группа запросов, или если где-то все ошибки были отменены? То есть, например, принцип транзакционности с запросами ALTER TABLE (которые совершаются неявно)

Ответы [ 2 ]

3 голосов
/ 21 января 2020

Вы говорите о коммите и откате.

Однако, если вы смешиваете нормальное SQL с DML (CREATE / ALTER / DROP et c), команды DML имеют подразумеваемый COMMIT как часть этого выполнение, вы не можете избежать этого. Так что это, вероятно, вызовет проблемы, если вы будете смешаны с вашими обычными запросами типа вставка / обновление / удаление

0 голосов
/ 26 января 2020

Транзакционный DML невозможен до MySQL 8.0. В этой версии есть «Словарь данных», который хранится в таблицах InnoDB. (Я не хочу думать о необходимом bootstrap!) DD позволяет, по крайней мере теоретически, ROLLBACK действий DDL, таких как ALTER и DROP TABLE. Изучите 8.0 документов, чтобы увидеть, достаточно ли это для ваших нужд.

В прошлом (до 8.0) многие операции DML были по меньшей мере разумными "cra sh безопасными". Например, ALTER используется для копирования таблицы, а затем для быстрой замены новой таблицы. Это обеспечило достаточно хороший способ восстановления после взлома sh во время ALTER.

. С 5,66 было внесено много существенных улучшений в ALTER. До этого единственным действительно «мгновенным» изменением было добавление опции к ENUM, и это имело предостережения. Есть еще вещи, которые требуют полного, трудоемкого перестроения таблицы - например, любое изменение операций

. *1013*

DML должно быть сведено к минимуму; они не предназначены для частого использования.

...