Я искал документацию 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-й оператор выдает исключение (Ограничительное Нарушение).
В текущей версии MySql v5.1 ... он не поддерживает откат по нескольким таблицам ... Это может измениться (я надеюсь) в ближайшем будущем!
Да, но только для таблиц, поддерживающих транзакции. Чтобы проверить, совместимы ли ваши таблицы, сделайте следующее
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 поиск.
Попробуйте добавить это в начало вашего скрипта:
SET autocommit=0;
По умолчанию MySQL выполняет фиксацию после каждого оператора, если вы не укажете иное.