2015-09-26 57 views
2

我目前對所有表使用Mysql與InnoDB存儲引擎。MySQL的鎖定和併發性

所以,我想知道這是否是一個真正的問題,如果有解決方案。

例如,我將使用一個數據庫交易的用戶收費: 1.檢查他的平衡 2.減去了平衡 3.信用這種平衡地方 4.提交

是否有更新,會發生什麼發生在#1之前和之前2 & 3.如果用戶退出或購買其他導致其餘額爲零的其他東西。這會導致失去平衡。據我所知,步驟#1只會導致共享鎖,並不會阻止寫入等。

是否有一個共同的解決方案呢?

+0

'select for update'(https://dev.mysql.com/doc/refman/5.6/en/innodb-locking-reads.html) –

+0

非常感謝!如果您將其作爲答案發布,我會接受它。 – maru

回答

3

您的標籤顯示您明白答案是什麼 - 鎖定。關係數據庫(通常)實現事務的ACID屬性,這確保了數據的一致性。在實踐中,出於性能原因,這些有時會放鬆,但大多數數據庫提供了一些方法來實現這一目標。

在MySQL中,鎖定機制取決於底層存儲引擎。 InnoDB提供了幾個選項,這些選項在documentation中描述。

爲了實現這些鎖,你基本上有一個SELECT 2個句法選項:

select . . . for update 
select . . . lock in share mode 

注意,這些報表應明確的事務中使用。