有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

一个事务中的java删除和选择操作

您好,我有一个事务,在这个事务中,我根据给定的数据从表中删除一些行,然后对同一个表中的相同数据执行select查询。我试过了,现在成功了。但是,如果在该时间点尝试执行删除操作时按事务逻辑执行,则会在表上应用锁,因此除非提交事务,否则可能无法从表中读取相同的数据。所以我想知道这种情况是有效的还是我的理解有错误

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

public void method(){

//transaction starts

// delete operation on table 1

// select operation on table 1

// transaction is committed. 

}

共 (2) 个答案

  1. # 1 楼答案

    你没有说你在使用什么数据库,但下面的内容应该是通用的

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

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

  2. # 2 楼答案

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

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