2013-02-14 78 views
1

我有一個數據庫,其中包含多個InnoDB表,我想從中讀取數據並將數據轉儲爲XML格式。這樣的XML將代表一個包含所有相關對象的對象。mysql一致性讀取:事務一致性快照

我不想在讀取過程中執行任何INSERT(SELECT,SELECT,bad INSERT,SELECT,...),因爲這會導致數據不一致。我應該使用哪種類型的交易?我無法清楚地看到START TRANSACTIONSTART TRANSACTION WITH CONSISTENT SNAPSHOT之間的區別。

+1

'LOCK TABLES'應該爲你工作:http://dev.mysql.com/doc/refman/5.1/en/lock-tables.html – Najzero 2013-02-14 10:36:41

+0

是的,但我不喜歡禁用任何作家將新記錄插入表中(如果可能的話)。 – ducin 2013-02-14 10:40:53

+0

好吧,你不會在這裏得到所有交易設備的傑克。這些插入/修改必須等待,或者您需要記住時間戳,並在轉儲文件時刪除任何更改。但這不值得imho的努力。無論如何,這是如何轉儲'無論如何'注意:默認情況下,所有涉及的表將在默認情況下鎖定讀取' – Najzero 2013-02-14 10:44:25

回答

2

這似乎是INNODB事務性快照的極好例子。你是正確的,WITH CONSISTENT SNAPSHOT之間的區別不重要 - 它只控制快照是在開始事務處理還是在第一次讀取時取得。

重要的是您必須在REPEATABLE_READ隔離級別執行。這是默認級別。

其他程序可能會插入或更新儘可能多的記錄,你仍然會從你的快照中獲得版本。

http://dev.mysql.com/doc/refman/5.0/en/innodb-consistent-read.html

+0

好吧,好像這就是我想知道的... 1年前;) – ducin 2014-02-04 07:24:55