2010-06-22 47 views
5

我搜索了MySql文檔並且什麼也沒找到。我已經試過這...回滾似乎並沒有取消在表1所作的插入和表2MySql可以在多個表上回滾一個sql事務嗎?

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:感謝所有的答案,但我忘了告訴大家,第三陳述拋出例外(約束違規)。

+1

您對所有這些表使用了事務引擎嗎? – Paolo 2010-06-22 15:05:27

+0

是的.. InnoDB引擎 – 2010-06-22 15:36:00

回答

1

從當前版本的MySql v5.1開始......它不支持在多個表上回滾......這可能會在不久的將來改變(我希望)!

+1

我不知道這是否改變了v5.6? – 2014-02-19 08:14:02

2

嘗試增加給你的腳本的開頭:

SET autocommit=0; 

默認情況下,MySQL將發出每個語句後提交,除非你告訴它,否則。

+0

我試過這個......如果在腳本中間引發錯誤,它不起作用。 – 2010-06-22 15:40:11

+0

不是一個好主意,因爲如果您錯誤地刪除了記錄 - 您將無法將事務處理退回。 – 2010-06-22 16:55:20

+0

啓動事務設置自動關閉自動提交。 – 2012-11-05 15:55:04

8

是的,但僅限於支持事務的表。要檢查你的表是兼容的,這樣做

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搜索。

相關問題