2012-01-10 72 views
-1

我很好奇,如果這可以實現,因爲我目前正面臨一個錯誤,並希望看到如果在事務中放入SELECT和UPDATE會修復它(如果您想知道爲什麼我不發佈導致錯誤的代碼是因爲它是一個複雜的環境,我無法發佈所有影響因素)。是否有可能在mysql事務中同時選擇和更新?

東西我也有興趣在,與此相關的是,如果你曾經經歷過的代碼,已經和後寫SELECT查詢UPDATE查詢,但在UPDATE獲取SELECT之前執行(這種可能性:該腳本可能會運行兩次排除)。

+0

'不會發布導致錯誤的代碼,因爲它是一個複雜的環境,然後嘗試在更簡單的環境中進行復制 – symcbean 2012-01-10 12:53:31

回答

3

這取決於你的意思是什麼交易。 有兩種類型的交易:

  • 隱transactons:INSERTUPDATESELECTDELETE語句,並在這樣的聲明沒有明確的交易指令,並且數據庫引擎將回滾整個語句如果發生錯誤。
  • Explicit Transactions:在這樣的交易內部附上的陳述是作爲一個單位執行的,或者是整個交易的COMMIT或者ROLLBACK

所以你不能兼得SELECTUPDATE一個查詢中,但是你可以,但他們就像一個事務裏

START TRANSACTION; 
    SELECT * FROM tableName; 
    UPDATE table SET something = 'other something' WHERE thirdsomething = @s; 
COMMIT; 

然後把它們放在一個存儲過程或者UDF。

需要注意的是:SELECT語句不修改數據,所以你可能不需要其封裝在一個事務中,所以你的情況,你將有隻有UPDATE語句,您可以只使用一個存儲過程沒有交易。

相關問題