2011-06-15 22 views
0

我通過Java中的多個線程連接到mysql數據庫。有時,線程正在讀取和更新數據庫表的同一列,以便出現某些不一致性。 在Java中有一個​​關鍵字,它限制了對一個資源的訪問。 mysql數據庫有沒有可能的限制?爲什麼這些不一致不會發生?mysql確保一次只有一個訪問

回答

2

您應該使用具有適當隔離級別的事務。

簡化的例子:

BEGIN TRANSACTION 
... 
COMMIT 

Mysql docs about transactions
Mysql docs about isolation levels

+2

交易僅在Innodb上可用,對於MyIsam他必須使用表鎖:http://dev.mysql.com/doc/refman/5.0/fr/lock-tables.html – regilero 2011-06-15 06:38:27

+0

我已經在使用存儲過程,他們不他們procide相同的功能?此外,如果我有10個事務或表鎖,它們是否提供數據一致性?事務/鎖將由不同的線程單獨執行。 – Vilius 2011-06-15 06:54:39

0

嘗試使用版本列,這樣您可以知道在您處理數據時是否有人與您的數據混淆。

含義:添加一個名爲「updated」的類型爲datetime的列,並且每當更新時檢查獲得的更新是否與db中行上的更新相同,如果他們不是你知道有人在你的記錄上工作過。

相關問題