我有一個數據庫,其中包含多個InnoDB表,我想從中讀取數據並將數據轉儲爲XML格式。這樣的XML將代表一個包含所有相關對象的對象。mysql一致性讀取:事務一致性快照
我不想在讀取過程中執行任何INSERT(SELECT,SELECT,bad INSERT,SELECT,...),因爲這會導致數據不一致。我應該使用哪種類型的交易?我無法清楚地看到START TRANSACTION
和START TRANSACTION WITH CONSISTENT SNAPSHOT
之間的區別。
我有一個數據庫,其中包含多個InnoDB表,我想從中讀取數據並將數據轉儲爲XML格式。這樣的XML將代表一個包含所有相關對象的對象。mysql一致性讀取:事務一致性快照
我不想在讀取過程中執行任何INSERT(SELECT,SELECT,bad INSERT,SELECT,...),因爲這會導致數據不一致。我應該使用哪種類型的交易?我無法清楚地看到START TRANSACTION
和START TRANSACTION WITH CONSISTENT SNAPSHOT
之間的區別。
這似乎是INNODB事務性快照的極好例子。你是正確的,WITH CONSISTENT SNAPSHOT之間的區別不重要 - 它只控制快照是在開始事務處理還是在第一次讀取時取得。
重要的是您必須在REPEATABLE_READ隔離級別執行。這是默認級別。
其他程序可能會插入或更新儘可能多的記錄,你仍然會從你的快照中獲得版本。
見http://dev.mysql.com/doc/refman/5.0/en/innodb-consistent-read.html
好吧,好像這就是我想知道的... 1年前;) – ducin 2014-02-04 07:24:55
'LOCK TABLES'應該爲你工作:http://dev.mysql.com/doc/refman/5.1/en/lock-tables.html – Najzero 2013-02-14 10:36:41
是的,但我不喜歡禁用任何作家將新記錄插入表中(如果可能的話)。 – ducin 2013-02-14 10:40:53
好吧,你不會在這裏得到所有交易設備的傑克。這些插入/修改必須等待,或者您需要記住時間戳,並在轉儲文件時刪除任何更改。但這不值得imho的努力。無論如何,這是如何轉儲'無論如何'注意:默認情況下,所有涉及的表將在默認情況下鎖定讀取' – Najzero 2013-02-14 10:44:25