在一个事务中删除并选择操作

时间:2012-12-04 13:15:30

标签: java database transactions

嗨,我有一个事务,我根据给定的数据从表中删除一些行,然后我在同一个表上对相同的数据进行选择查询。我试过这个并且它正在成功发生。但是如果在我们尝试在那个时间点执行删除操作时使用事务逻辑,则会在表上应用锁定,因此除非事务已提交,否则可能无法从表中读取相同的数据。所以我想知道这种情况是有效的还是我理解中存在一些错误。

函数内部的主体遵循以下顺序:

public void method(){

//transaction starts

// delete operation on table 1

// select operation on table 1

// transaction is committed. 

}

2 个答案:

答案 0 :(得分:3)

在同一交易的上下文中删除然后选择数据不会有任何问题。

如果有多个并发事务处理相同的数据,则可能需要考虑锁定。确切的机制取决于事务正在做什么,DBMS引擎,事务隔离级别等。

答案 1 :(得分:0)

您没有说明您使用的数据库,但以下内容应该是一般的和常见的。

如果您的方法使用相同的连接进行删除和选择,则从连接的上下文(视点)删除已经发生,因此您的查询“对于同一个表中的相同数据”将不返回任何记录。

从所有其他并发连接(包括您的方法,如果它没有使用相同的连接进行删除和选择),您的工作未提交,因此根据他们 可能的技术和设置 甚至在您回滚或提交之前都被阻止,或者他们可能会看到您的交易开始之前的数据版本。