2016-04-06 5 views
0

Я пытаюсь запустить эти запросы для выполнения ROLLBACK, и я не уверен, что я делаю неправильно, но получаю предупреждение:MySQL: START TRANSACTION - UPDATE - ROLLBACK: Non-Transactional Tables

Некоторые таблицы, не связанные с транзакциями, не могут быть отброшены назад.

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

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

ответ

3

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

Чтобы проверить конкретную таблицу, используйте

SHOW CREATE TABLE <tablename>; 

который покажет вам полный CREATE TABLE заявление, в том числе ENGINE статья.

Чтобы проверить, какие двигатели установлены в вашей базе данных, используйте

SHOW ENGINES; 

Если у вас есть InnoDB установлен, но это не двигатель по умолчанию, вы можете либо указать ENGINE=InnoDB в CREATE TABLE заявлении или изменить его позже с

ALTER TABLE <tablename> ENGINE = InnoDB; 
+0

Обратите внимание, что двигатель по умолчанию для MySQL ** не ** InnoDB, если ваша версия старше 5.5; проверьте здесь некоторые параметры настройки InnoDB как механизма по умолчанию: http://stackoverflow.com/questions/3050492/how-can-i-set-default-storage-engine-used-by-mysql – andrechalom

+0

Спасибо, это помогло я выяснил, что двигатель был MyISAM, какой отстой. Теперь я понимаю. – Sierra

+0

О, кстати, ваше решение было превосходным. Разумеется, оба решения были полезны. :) – Sierra

 Смежные вопросы

  • Нет связанных вопросов^_^