MySql может откатывать sql транзакцию по нескольким таблицам?

Я искал документацию MySql и ничего не нашел. Я попробовал это... Откат, кажется, не отменяет вставки, сделанные в table1 и table2

Start Transaction;

INSERT INTO Table1(field1,field2) VALUES (value1, value2);

INSERT INTO Table2(field3,field4) VALUES (value3, value4);

INSERT INTO Table3(field5,field6) VALUES (value5, value6);

Rollback;

ОБНОВЛЕНИЕ: Спасибо за все ответы, но я забыл говорить, что 3-й оператор выдает исключение (Ограничительное Нарушение).

5
задан Jalal El-Shaer 24 June 2010 в 12:08
поделиться

3 ответа

В текущей версии MySql v5.1 ... он не поддерживает откат по нескольким таблицам ... Это может измениться (я надеюсь) в ближайшем будущем!

1
ответ дан 13 December 2019 в 19:21
поделиться

Да, но только для таблиц, поддерживающих транзакции. Чтобы проверить, совместимы ли ваши таблицы, сделайте следующее

SELECT table_name
     , engine
  FROM information_schema.tables t
 WHERE t.table_name IN('Table1','Table2','Table3');

. Если какие-либо из них являются MyISAM , они не совместимы с транзакциями. Вам нужно будет изменить их все на InnoDB

ALTER TABLE [TableName] ENGINE=InnoDB;

Но будьте осторожны - MyISAM поддерживает некоторые функции, которых нет в InnoDB, такие как FULLTEXT поиск.

8
ответ дан 13 December 2019 в 19:21
поделиться

Попробуйте добавить это в начало вашего скрипта:

SET autocommit=0;

По умолчанию MySQL выполняет фиксацию после каждого оператора, если вы не укажете иное.

2
ответ дан 13 December 2019 в 19:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: