Может ли MySql выполнить откат транзакции sql для нескольких таблиц? - PullRequest
5 голосов
/ 22 июня 2010

Я искал документацию 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;

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

Ответы [ 3 ]

8 голосов
/ 22 июня 2010

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

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.

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

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

SET autocommit=0;

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

1 голос
/ 16 июля 2010

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

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