我真的需要数据库事务吗?

时间:2017-07-24 20:45:25

标签: java database transactions spring-data-jpa

如果我的方法有多个只读更新,删除语句,那么创建事务是否有意义?虽然,表面上没有任何意义(如果它是单线程的);但这是一个并发的Web应用程序,其中多个线程可能同时修改数据。

3 个答案:

答案 0 :(得分:1)

如果方法中有多个数据库操作(INSERT,UPDATE,DELETE),则会指向使用transection

答案 1 :(得分:1)

如果此方法例如2执行,则另一种方法是更新数据库。可能会发生一次读取,然后您的另一个(事务性)方法同时运行,并且只有在此之后才会执行第二次读取。这可能会导致读取结果无效。

答案 2 :(得分:1)

是的,可能有充分的理由将您的读取(SELECT)操作包含在显式事务或工作单元中。如果更新或删除某行的决定取决于您读取的行(同一行或另一个表中的行)中的列值,或者甚至存在某些行,那么您可能需要将SELECT作为一部分进行操作交易。

一个简单的示例案例:表A包含书籍,并且有一个用于评级的int列。如果它的评级为零(0),我想删除一个书行。如果没有事务,数据层中的代码将选择评级为0的行,然后迭代该行集合。在您选择行之后的某个时间,另一个用户将其中一本书的评级更改为一(1)。你仍然最终会删除该书的行,而不应该删除。

有数据一致性的策略,并且在您获取数据(时间戳等)后检查更新,但您只需要在读取数据并根据数据做出决策时评估数据完整性的风险,并允许其他用户更新相同的数据。

交易旨在消除这种风险。