2012-11-05 56 views
0

我在這裏看到了多個答案,並在谷歌回滾一個事務意味着只有最後一個命令的回滾,而且我也讀取,這意味着所有的命令。 (既沒有記錄也沒有被引用)MySQL是哪種方法回滾交易有效?

我需要做的是創建一個存儲過程,在表A上插入/更新,獲取A的最後一個ID,將該ID插入B,獲取B的最後一個ID,插入到C等等,等等。

我想知道哪些是提交或回滾事務中的所有命令的方法,以便啓動事務,如果出現故障,請取回所有作爲原始。

帶有IF錯誤和last_id的SQL代碼將會被優化,因爲我也看到了很多不同的方法來獲取最後一個id,我不知道哪個更好。

順便說一句,所有表都InnoDB的

親切的問候,

+0

您需要關閉自動提交功能。然後可以將一組更新作爲單個事務提交。 http://dev.mysql.com/doc/refman/5.0/en/commit.html – Jaydee

+0

的官方文檔,autocommit設置爲關閉,如果你做了「開始交易」。是不是真的? –

回答

1

如果BEGIN事務,然後什麼都不會得到應用,直到你COMMIT它。放棄您的連接或發出ROLLBACK與永不犯下它相同。

這當然假設你已經設置了autocommit,這通常是這種情況。

如果您將它們作爲事務包裝,您也可以回退單個命令。

更多信息請見the documentation

請記住,MyISAM和其他引擎不支持InnoDB所做的事務。此外,只有INSERT,UPDATE,DELETEREPLACE語句才能夠回滾。其他的東西,比如對模式的改變,都不是。

+0

如果你使用啓動事務,autocommit設置爲off,說文檔。這是真的?哪個更好?開始或開始交易? +1順便說一句 –

+1

我不會太擔心在交易過程中'autocommit'被切換。只要發佈一個'BEGIN',一系列的操作和一個'COMMIT',如果你準備永久使用它的話。如果在操作過程中遇到錯誤,您可以恢復或中止事務。 – tadman

+0

優秀。你可以建議什麼方法來檢查是否有錯誤並且安全?因爲我讀了三四種方法,懷疑「最後一個錯誤」或「一些錯誤」,我需要「任何錯誤」 –