gpt4 book ai didi

java - 如果在数据检索过程中删除记录会发生什么?

转载 作者:行者123 更新时间:2023-12-02 00:55:15 25 4
gpt4 key购买 nike

假设我有 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 WHERE Id = 2”。删除过程恰好在第一次提取和第二次提取之间发生。

第一次获取(A)

[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

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

最佳答案

你问的叫“PHANTOM READ”。大多数数据库使用锁来防止事务中发生这种情况。

某些数据库提供“READ COMMITTED”(或更低)隔离级别,在这种情况下可能会发生幻读。

关于java - 如果在数据检索过程中删除记录会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1117291/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com