2015-11-21 1 views
0

Давайте подумаем о сценарии.Является ли LIMIT OFFSET стабильным при вставке нового элемента?

В таблице указано 1000 строк.

я опрошена строк с LIMIT 100.

После запроса, некоторые строки вставляются в таблицу.

Затем я снова запрашивается, с LIMIT 100 и OFFSET 100.

Я ожидаю, что результат не зависит от Чет первого запроса.

Я хочу получить результат после первого запроса.

Как это сделать? Пожалуйста помоги.

ответ

0

Стандарт SQL не дает никаких обещаний относительно естественного упорядочения строк в таблице - новые строки могут быть вставлены в конце таблицы или в любом месте посередине. В зависимости от того, где ваши dbms вставили строки, которые, скорее всего, будут зависеть от того, какие строки были ранее удалены, ваш второй запрос может легко выбрать строки, уже выбранные в первом запросе, или пропустить некоторые строки между запросами.

Единственный способ, которым я могу надеяться сделать то, что вы хотите надежно, - выбрать всю таблицу во временную таблицу или курсор, а затем прочитать записи по 100 за один раз из этого второго набора записей.

Вы также можете выполнять все свои запросы в рамках одной сериализуемой транзакции (которая будет скрывать любые вставки или удаления, выполняемые другими пользователями в течение всего срока действия вашей транзакции), но даже это не будет надежным решением.