Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果在数据检索过程中删除记录,会发生什么情况?_Java_Sql_Concurrency - Fatal编程技术网

Java 如果在数据检索过程中删除记录,会发生什么情况?

Java 如果在数据检索过程中删除记录,会发生什么情况?,java,sql,concurrency,Java,Sql,Concurrency,假设我有6条记录,我将获取大小设置为2 [Id] [Name] 11 A <-- 1st fetch, start from 1 position 21 B 31 C <-- 2nd fetch, start from 3 position 41 D 51 E <-- 3rd fetch, start from 5 position 61 F 如果第一个用户发出SELECT*from tablex,第二个用户发出DELETE f

假设我有6条记录,我将获取大小设置为2

[Id] [Name]
 11   A   <-- 1st fetch, start from 1 position
 21   B
 31   C   <-- 2nd fetch, start from 3 position
 41   D
 51   E   <-- 3rd fetch, start from 5 position
 61   F
如果第一个用户发出SELECT*from tablex,第二个用户发出DELETE from tablex,其中Id=2。删除过程正好发生在第一次提取和第二次提取之间

先拿一个

[Id] [Name]
 11   A   <-- 1st fetch, start from 1
 21   B
从B中删除后

[Id] [Name]
 11   A   <-- 1st fetch, start from 1
 31   C   
 41   D
 51   E   
 61   F
现在,A的第二次提取应该从3开始,但删除会导致记录的位置被更改。如果第二次提取从位置3开始,则将提取的记录为

[Id] [Name]
 41   D   <-- position 3
 51   E   
而不是

[Id] [Name]
 31   C   <-- 2nd fetch, start from 3 position
 41   D

我不确定这个问题是否会发生。或者现代的数据库足够智能来检测它?或者只是在数据检索过程中锁定表?

在MSSQL中不会出现这种问题,因为在检索结果集时会发生锁定。
我不知道另一个RDBMS会怎么样。

在MSSQL中不可能是这样的问题,因为在检索结果集时会发生锁定。
我不知道另一个RDBMS会怎么样。

发生什么在一定程度上取决于两个事务中有效的隔离级别


如果获取进程以可序列化隔离运行,则删除操作将失败。如果取数进程以脏读未提交隔离运行,那么几乎任何事情都是可能的,但最有可能的是,它将读取未删除的记录。

发生的情况将部分取决于两个事务中有效的隔离级别

如果获取进程以可序列化隔离运行,则删除操作将失败。如果抓取进程以脏读未提交隔离运行,那么几乎任何事情都是可能的,但最有可能的是,它会读取未删除的记录。

您所要求的就是所谓的。大多数数据库使用锁来防止事务中出现这种情况

有些数据库提供或降低了隔离级别,在这种情况下可能会发生幻象读取。

您所要求的就是所谓的。大多数数据库使用锁来防止事务中出现这种情况



有些数据库提供了或更低的隔离级别,在这种情况下可能会发生幻象读取。

我挖掘了DELECT关键字GOOD catch,akf:D我刚刚更正了它。请详细说明您使用的数据库和数据库访问api我将使用Oracle。然而,这个问题并不局限于Oracle,因为我经常处理mySQL、sybase。我挖掘DELECT关键字GOOD catch,akf:D我刚刚更正了它。请详细说明您使用的是什么数据库和数据库访问api我将使用Oracle。然而,这个问题并不局限于Oracle,因为我经常处理mySQL、sybase。啊,是的,Oracle使用行版本控制:不正确:只有可序列化的隔离级别提供了您所说的锁定级别。当您读取选择的数据时,记录将被共享的S锁锁定。在解除锁定之前,无法编辑或删除记录。如果你使用NOLOCK提示,就不会有锁。Alex_L,有大量证据证明你错了。就在我的脑海里,这是:两个亚历克斯的歪斜总数的情况:这里的任何答案都会因为取回而变得复杂。select是一次性执行的,还是客户端游标一次执行两行?啊,是的,Oracle使用行版本控制:不正确:只有可序列化的隔离级别提供您所说的锁定级别。读取select数据时,记录将由共享的S锁锁定。在解除锁定之前,无法编辑或删除记录。如果你使用NOLOCK提示,就不会有锁。Alex_L,有大量证据证明你错了。就在我的脑海里,这是:两个亚历克斯的歪斜总数的情况:这里的任何答案都会因为取回而变得复杂。选择是一次性执行,还是客户端游标一次执行两行?