事务隔离和并发

时间:2018-06-09 15:04:22

标签: java database concurrency transactions isolation-level

我正在尝试使用Connector / J和MySql在Java(JDK1.8)中构建应用程序。我被告知Serializable是最高级别,但它会影响性能,因此Serializable并不常用。

但请考虑这种情况:

有两个提交将更新同一行的字段(提交A和提交B)。如果A和B同时发生且隔离级别不是Serializable,则会有数据争用,这会使字段不一致。但在Serializable级别,这两个更新不会同时发生,所以要么A发生在B之前,B发生在A之前,而行要么在版本A中,要么在版本B中,而不是A和乙

我认为ACID的Atomicity保证了A和B的同步。但似乎Atomicity的定义只保证一个事务“全部或全部”发生,它没有提及并发提交。

那么我应该使用Serializable来防止数据竞争?哪一个ACID实际上保证了一次更新的原子性?

1 个答案:

答案 0 :(得分:1)

没有。为了避免您描述的问题,您不需要“可序列化”。还有其他隔离级别。你害怕的只能发生在“未提交读”的情况下。对于任何其他隔离级别,单个记录中的字段将始终保持一致。