2011-12-04 22 views
2

所以這裏是...如果多個連接用於查詢,mysql事務是否會工作?

//我開始交易 $ mysqli = new mysqli(...);

//開始交易 $ mysqli-> autocommit(FALSE);

  • 這裏是一個選擇準備報告有自己的數據庫連接
  • 這裏是一個插入準備報告有自己的數據庫連接
  • 這裏是一個slect準備報告上述DB康恩
  • 插入新康恩
  • 插入新康恩
  • 插入新的康恩

如果每一個準備好的查詢returs真正它將($ mysqli->提交()),否則$ mysqli->回滾

我不知道因爲什麼原因,交易將自動提交

我已經做了一些交易以3倍數連接和他們回滾...這一個不... 是否使mysql被支持一個具有單個連接查詢的事務?

解決了......如果來自不同表格的查詢是相互依賴的,就像我的情況一樣,並且您需要強大的數據訪問安全性,請爲每個打開的連接設置autocommit爲false,爲每個失敗的bussness邏輯設置var爲false,如果有什麼失敗,回滾每一組查詢,否則comit evry查詢... 是的交易執行每個連接,有別的管理回滾時,我說,MySQL做了一些多連鎖交易回滾

重新編輯:ofc這不會像一個正常的交易工作...在系統崩潰的情況下,數據將被存儲,直到崩潰的時刻

+0

您的示例缺少事務的開始。它需要先啓動。 – hakre

回答

5

事務內部的所有查詢都必須位於同一連接上。如果您有三個連接,則打開三個事務(假設它們不處於自動提交模式)。

如果您確實需要分佈式事務,則必須使用MySQL's XA Transactions-但只有在處理多個數據庫中的事務(或者其他非數據庫事務)時才需要這樣做, 。

+0

是的邏輯答案...無論如何mysql處理交易的方式很奇怪...告訴你一些事務在多個連接上工作(測試,回滾和提交工作,因爲他們應該)和特定的查詢默認autocommit(真)。 ..當我閱讀更多關於mysql事務時,它甚至很重要當你在實際的transacton中插入/刪除/更新 – Tudor