嗨,我有一个事务,我根据给定的数据从表中删除一些行,然后我在同一个表上对相同的数据进行选择查询。我试过这个并且它正在成功发生。但是如果在我们尝试在那个时间点执行删除操作时使用事务逻辑,则会在表上应用锁定,因此除非事务已提交,否则可能无法从表中读取相同的数据。所以我想知道这种情况是有效的还是我理解中存在一些错误。
函数内部的主体遵循以下顺序:
public void method(){
//transaction starts
// delete operation on table 1
// select operation on table 1
// transaction is committed.
}
答案 0 :(得分:3)
在同一交易的上下文中删除然后选择数据不会有任何问题。
如果有多个并发事务处理相同的数据,则可能需要考虑锁定。确切的机制取决于事务正在做什么,DBMS引擎,事务隔离级别等。
答案 1 :(得分:0)
您没有说明您使用的数据库,但以下内容应该是一般的和常见的。
如果您的方法使用相同的连接进行删除和选择,则从连接的上下文(视点)删除已经发生,因此您的查询“对于同一个表中的相同数据”将不返回任何记录。
从所有其他并发连接(包括您的方法,如果它没有使用相同的连接进行删除和选择),您的工作未提交,因此根据他们 可能>的技术和设置 甚至在您回滚或提交之前都被阻止,或者他们可能会看到您的交易开始之前的数据版本。