как разместить записи, чтобы избежать обновления одновременно с другим пользователем - PullRequest
0 голосов
/ 28 сентября 2011

Я использую select sql (DB2 для IBM i), чтобы прочитать запись из базы данных и показать ее в форме, где пользователь может изменить и обновить ее!

Теперь мне нужно, чтобы, если пользователь просматривает эту запись, в то же время другой пользователь может только просматривать, но не обновлять этот же racord!

как я могу это сделать? Есть ли способ выбрать эту запись, выделяя (или блокируя) эту запись, чтобы избежать одновременного обновления? (также если есть такая же инструкция php, чтобы сделать это)

(например, я работаю с языковой программой RPG, где я использую инструкцию CHAIN, которая выделяет записи для предотвращения этой проблемы)

спасибо!

Ответы [ 4 ]

1 голос
/ 28 сентября 2011

По моему опыту, вам следует избегать перехода по этому маршруту, если возможно.

Да, запись можно заблокировать, но как долго вы намереваетесь сохранить блокировку? Что произойдет, если ваш пользователь заблокировал длинный обед перед тем, как нажать «сохранить»?

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

1 голос
/ 28 сентября 2011

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

Тем не менее, в DB2 SQL способ блокировки строки - FETCH ... FOR UPDATE.

0 голосов
/ 31 января 2015

Как насчет того, чтобы избежать чтения заблокированных записей?

Выберите * из вашей таблицы
где поле = 'компаратор'
Пропустить заблокированные данные

Также вы можете получить определенное количество строк

Выберите * из вашей таблицы
где поле = 'компаратор'
Пропустить заблокированные данные
ПОЛУЧИТЬ ПЕРВЫЙ 1 РЯД ТОЛЬКО

Подходит ли вам?

0 голосов
/ 28 сентября 2011

Да, вы можете заблокировать таблицу во время обновления данных.Я не знаю, как вы можете это сделать в DB2, но, вероятно, вы можете заблокировать таблицы при обновлении данных и разблокировать их после завершения.

Пусть эта ссылка поможет вам:

http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/admin/r0000972.htm

...