2010-12-02 38 views
0

我想寫一個過程來處理將數據插入到兩個表中。如果插入件在任何一箇中都失敗,那麼整個過程將失敗。我嘗試了很多種不同的方式,無法實現。我有意讓我的第二次插入失敗,但數據無論如何都插入到第一個表中。尋找一個使用row_count的過程的例子

我試圖嵌套基於rowcount的IF語句,但即使數據在第二次插入時失敗,數據仍然被插入到第一個表中。我正在查找總共2個受影響的行。

有人能告訴我如何處理多個插入和回滾,如果其中一個失敗?一個簡短的例子會很好。

回答

0

如果您使用的是InnoDB表(或其他兼容引擎),則可以使用MySQL的Transaction功能,該功能允許您按照自己的意願進行操作。

  • 基本上你開始交易
  • 做查詢的結果
  • 檢查如果每一個結果是正常調用CONMIT
  • 否則你調用ROLLBACK作廢事務中的所有查詢。

你可以閱讀和文章關於與例子here

HTH!

+0

我應該在我的文章已經提到,但我所做的假設,即每個人都知道我是已經在使用交易。問題是row_count爲第一個插入返回1,我假設第二個插入爲-1。即使事務已經開始,但當第二次插入失敗時,數據仍會插入到第一個表中。我已經測試了應該等於2的受影響的行。如果不是回滾其他提交。 – jim 2010-12-02 08:59:55

0

您可以嘗試關閉自動提交功能。它可能會自動提交你的第一次插入,即使您沒有明確承諾一個已經開始的交易:

SET autocommit = 0; START TRANSACTION ......