2014-09-26 34 views
1

我正在使用MySQL MyISAM,並且這是無法更改的。但是,我只熟悉交易方法。由於MyISAM不支持事務,我想結合兩個更新查詢到一個這樣的:一個MySQL查詢中的多個更新可以模擬事務行爲嗎?

UPDATE table1, table2 SET table1.col1='value1', table2.col1='value2' 
WHERE table1.col3='567' AND table2.col6='876' 

這是否保證,如果任何一個子查詢失敗了,另一個就不會被執行好,查詢將返回FALSE?

爲了測試這一點,我故意換成有效的字段名無效一個表1,然後表2在這兩種情況下,phpMyAdmin的返回的錯誤,並沒有查詢被處決。

將這種行爲在任何其他查詢錯誤的情況下,可以觀察到的?

+0

它不保證任何遠程交易類似的東西。無論您嘗試使用什麼,無論您如何編寫該查詢,都不會調用OS的'fsync'調用或強制'fsync'。因此,按照定義 - 不,它不會模仿交易行爲。你不能與MyISAM進行交易,你不能模擬它,你不能擠壓它。你可以嘗試鎖定什麼不是,但那不會。 – 2014-09-26 13:50:00

回答

1

只能依靠被拋出後的第一個錯誤不能執行任何(與這些錯誤通常不是程序員,但在數據庫級別上,這使得它們很難預測)。已在這一點被寫入到數據庫中的任何內容回滾(畢竟,你正在使用的不支持MyISAM表)。

這不是你想聽到的答案,但如果你想預測和可靠的交易行爲,真的是唯一的方法是使用一個支持它們的引擎(例如InnoDB)。

+0

我明白了。它看起來像我必須探索'鎖定表'的方法。 – 2014-09-26 13:55:58

相關問題