2017-07-24 66 views
0

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

+0

系统中是否有其他方法可能写入数据库?可以看到部分更新的数据吗? – chrylis

+0

如果您重视您数据的一致性,那么***是***。如果您不关心数据是否损坏,或者您的数据库一次只能由一个用户访问,则不会。 – Andreas

+0

我已经修改了一些问题。这是并发的Web应用程序。但没有具体的交易要求。 – Imran

回答

1

是的,可能有一个很好的理由将您的读取(SELECT)操作包含在明确的事务或工作单元中。如果更新或删除某行的决定取决于您读取的行(同一行或另一个表中的某行)中的列值,或者甚至存在某行,则可能需要将该SELECT作为的交易。

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

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

交易意味着消除这种风险。

1

,如果你有一个以上的数据库操作(INSERT,UPDATE,DELETE)的方法会有一点用横切

1

如果此方法例如2接连读取,并且存在另一种方法更新你的数据库。它可能发生,一个读取发生,然后你的其他(事务)方法同时运行,并且只有在你的第二个读取被执行之后。这可能会导致无效的读取结果。