1
我可以/應該在單個MySQL事務中包含多少PHP代碼?在一次交易中調用其他類&方法,操縱或創建實例等方面的交易的最佳做法是什麼?PHP + MySQL:多少編程可以或應該包含在數據庫事務中?
我的意思在這裏是「有」,是進入beginTransaction();
和commit();
之間
我可以/應該在單個MySQL事務中包含多少PHP代碼?在一次交易中調用其他類&方法,操縱或創建實例等方面的交易的最佳做法是什麼?PHP + MySQL:多少編程可以或應該包含在數據庫事務中?
我的意思在這裏是「有」,是進入beginTransaction();
和commit();
之間
我曾經使用一個交易,一個元素及其所有的依賴。
例如,我有一個論壇,用戶可以更改他們的暱稱。但他們也可以刪除他們的帳戶,我不想看到帖子被刪除。所以我需要在每個帖子的某個地方保存我的用戶的名字,例如VARCHAR
等等。
如果用戶更改他的暱稱,我將開始一個交易,在任何可能的地方更改他的暱稱,如果沒有錯誤,那麼我承諾。在這一點上我沒有看到請求的數量,因爲如果一個請求失敗,我應該能夠回滾所有關於這個改變的事情。
但是,如果管理員在管理面板中更改了2個暱稱並驗證一次,我將打開2個交易(每個用戶一個),以避免在單個交易中出現問題。
不要考慮「交易中的代碼」,考慮控制交易的*生存期*。一般來說,這個生命週期應該是**安全**和**有效**完成操作所需的最小*,但是沒有硬性規則:這取決於。事務可以維護數據庫資源的鎖定。這可能很好(ACID)。和壞(爭用)。我通常設計的代碼是這樣的:事務*只是*「傳遞」了調用堆棧,*從不*存儲在一個對象中,因爲它使得生命週期跟蹤更加簡單。 – 2012-09-10 17:18:35
你能說清楚你最後一句話嗎? – JDelage
我從未將事務分配給實例變量。所以創建事務的範圍(函數)也必須最終清理事務。如果其他功能需要訪問該事務,則通過參數傳遞。任何通過事務的函數都不是*所有者,並且必須*不會*影響生命週期(以後保存,異常清理等)。因此,我知道當首次創建事務的函數結束時,事務總是完成(提交或回滾並處置)。 – 2012-09-10 17:29:48