簡體   English   中英

事務隔離和並發

[英]Transaction isolation and concurrency

我正在嘗試使用Connector / J和MySql在Java(JDK1.8)中構建應用程序。 我被告知Serializable是最高級別,但它會影響性能,因此Serializable並不常用。

但請考慮這種情況:

有兩個提交將更新同一行的字段(提交A和提交B)。 如果A和B同時發生且隔離級別不是Serializable,則會有數據爭用,這會使字段不一致。 但在Serializable級別,這兩個更新不會同時發生,所以要么A發生在B之前,B發生在A之前,而行要么在版本A中,要么在版本B中,而不是A和B.

我認為ACID的Atomicity保證了A和B的同步。但似乎Atomicity的定義只保證一個事務“全有或全無”發生,它對並發提交沒有任何說明。

那么我應該使用Serializable來防止數據競爭? 哪一個ACID實際上保證了一次更新的原子性?

不。為了避免您描述的問題,您不需要“可序列化”。 還有其他隔離級別。 你害怕的只能發生在“未提交讀”的情況下。 對於任何其他隔離級別,單個記錄中的字段將始終保持一致。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM