1

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

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

public void method(){

//transaction starts

// delete operation on table 1

// select operation on table 1

// transaction is committed. 

}
4

2 回答 2

3

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

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

于 2012-12-04T13:26:25.470 回答
0

您没有说您使用的是什么数据库,但以下内容应该是通用的和常见的。

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

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

于 2014-12-17T19:58:21.213 回答