2012-04-16 55 views
2

http://imgur.com/IZgvl學習ACID兼容交易

大家好, 我一直在學習的MySQL(專,使用PHP還沒有經驗)從威利的MySQL管理的聖經。我提前道歉,如果我出現的任何錯誤似乎是孩子對你的玩法,但我認爲這裏不會有傷害來幫助打磨我的學習...

所以,只需切到在這裏追逐 - 我試圖向自己展示符合ACID交易的「原子性」和「一致性」方面。很基本。然而,當試圖通過從賬戶ID 2轉移到非易失性'3'來強制執行錯誤時,交易拒絕恢復到之前的狀態,並且現在可憐的Hudson在我承諾之後賣空5000美元。任何人都可以指出爲什麼這是這樣嗎?謝謝!

我期待着成爲一個經常在這裏,

-MyPreQL

+0

如果我們能看到您用來演示它的代碼,這將有所幫助。 – mdoyle 2012-04-16 21:37:34

+0

嘗試在您的問題中插入並格式化您的代碼。 – miku 2012-04-16 21:38:00

回答

3

你仍然運行在您的交易提交。當你有錯誤時,你需要改爲ROLLBACK。

+0

感謝您的及時回覆!我試圖ROLLBACK;提交後,但哈德森的帳戶仍然是10000.據我所知,COMMIT是爲了使更改持久,但包括即使他們工作在不存在的行上成功的更改嗎?簡單地說 - 我的事務自動回滾到開始會採取什麼樣的失敗? – 2012-04-16 21:43:58

+0

您想要ROLLBACK *而不是* COMMIT。 * COMMIT後不是ROLLBACK *。在您設置的場景中,沒有「自動」方式來啓動ROLLBACK。您需要使用代碼來檢測第二個更新是否影響了0行並作出相應響應。 – 2012-04-16 21:45:29

+0

謝謝,我現在完全理解。 – 2012-04-16 22:19:21

2

另外。我知道這是微不足道的,但它沒有被提及,它仍然是一個常見的錯誤。確保你的表是引擎類型innoDB而不是MyIsam。否則,所有這些提交和回滾將看起來很好,但是無效,因爲MyIsam不支持事務並且不能兼容ACID :)