Допустим, у меня есть 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
Если 1-й пользователь выдает «SELECT * from tablex», а 2-й пользователь выдает «DELETE FROM tablex, ГДЕ Id = 2. Процесс удаления происходит как раз во время между 1-й и 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
Теперь 2-й выбор для (A) должен начинаться с 3, но удаление приводит к изменению положения записей. Если 2-й выбор начинается с позиции 3, записи, которые будут выбраны:
[Id] [Name]
41 D <-- position 3
51 E
вместо
[Id] [Name]
31 C <-- 2nd fetch, start from 3 position
41 D
Я не уверен, возникнет ли эта проблема или нет. Или современный БД достаточно умен, чтобы его обнаружить? Или просто заблокировать таблицу в процессе извлечения данных?