Russian Qt Forum
Ноябрь 24, 2024, 14:08 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Запрет редактирования строки таблицы MySql, если данная строка просматривается  (Прочитано 10901 раз)
miha-ha
Гость
« : Июнь 13, 2010, 09:42 »

Подскажите как в теории(или практически) реализовать?
Ситуация: один пользователь просматривает запись таблицы, все другие пользователи должны уведомляться, что данная запись заблокирована для изменения таким-то пользователем. Система распределённая БД на сервере, доступ клиентов через инет, клиенты на QT.
Я думал реализовать так: при запросе на редактирование в таблицу BLOCK_REC помещается id записи с указанием пользователя производившего выборку. После оканчания обработки записей пользователь очищает свои записи в таблице BLOCK_REC. При такой схеме перед выбором определенной записи мне достаточно просмотреть таблицу BLOCK_REC и проверить можно ли редактировать, и если нет, то узнать кем заблокирована запись... Но есть очень тонкий момент, который проявляется если пользователь не смог за собой очистить заблокированные записи... например выключили свет ...
Подскажите как решается данный вопрос?
Записан
MoPDoBoPoT
Гость
« Ответ #1 : Июнь 13, 2010, 15:52 »

В MySql есть системные триггеры?
А вообще, с таким вопросом лучше на sql.ru идти.
Записан
linkr
Гость
« Ответ #2 : Июнь 13, 2010, 17:13 »

вопрос интересный, реализовать можно по разному, тоже бы хотелось интересный ответ
Записан
miha-ha
Гость
« Ответ #3 : Июнь 15, 2010, 13:40 »

В MySql есть системные триггеры?
А вообще, с таким вопросом лучше на sql.ru идти.

Спасибо за совет! Попытаю там счастья
Записан
crossly
Гость
« Ответ #4 : Июнь 15, 2010, 14:29 »

select ... for update
Записан
miha-ha
Гость
« Ответ #5 : Июнь 15, 2010, 18:03 »

select ... for update
а как узнать(организовать) каким пользователем заблокирована запись?
Записан
Nimbus
Гость
« Ответ #6 : Июнь 16, 2010, 06:56 »

а как узнать(организовать) каким пользователем заблокирована запись?
Скорее всего - никак. Я в Оракле столкнулся с такой же проблемой. Для этого нужен доступ к просмотру всех транзакций в СУБД, а это уже по-видимому привилегия администратора. Либо, всё таки ведите ещё одну таблицу в своей БД, в которой отражается состояние заблокированных записей и пользователей их заблокировавших.
« Последнее редактирование: Июнь 16, 2010, 06:59 от Nimbus » Записан
crossly
Гость
« Ответ #7 : Июнь 16, 2010, 10:05 »

простите.... а зачем знать кто заблокировал запись?
Записан
xokc
Птица говорун
*****
Offline Offline

Сообщений: 976



Просмотр профиля
« Ответ #8 : Июнь 16, 2010, 20:23 »

Видимо, чтобы себя самого не заблокировать
Записан
Nimbus
Гость
« Ответ #9 : Июнь 17, 2010, 04:17 »

Видимо, чтобы себя самого не заблокировать
Вообще-то бывают такие случаи, когда человек заблокировал запись и ушёл по своим делам, а другие не могут получить к ней доступ. Для этого и надо, чтобы потом знать кого пинать, когда работа стоит.
Записан
crossly
Гость
« Ответ #10 : Июнь 17, 2010, 09:57 »

и что вы будите бегать по офису.... и вырубать проги у тех кто залочил... ??
Записан
Nimbus
Гость
« Ответ #11 : Июнь 17, 2010, 11:58 »

и что вы будите бегать по офису.... и вырубать проги у тех кто залочил... ??
Конечно, если БД таких масштабов, что к ней подключены сотрудники из нескольких офисов в городе (в моём случае так), то проще позвонить начальнику нужного отдела или самому сотруднику, ну а так, чего бы и не побегать Подмигивающий
Записан
crossly
Гость
« Ответ #12 : Июнь 17, 2010, 12:11 »

хороший подход....
Записан
miha-ha
Гость
« Ответ #13 : Июль 10, 2010, 23:24 »

Сделал так(может кому пригодится):
При выборе записи заноситься информация в таблицу БЛОК_РЕК (имя_таблицы, пользователь_заблокировавший, ид_заблокированной_записи, срок_аренды)
срок_аренды - это метка времени = текущее время + 90секунд;
При просмотре записи больше минуты аренда продлевается опять на 90секунд.

При таком подходе, даже если отключили неожиданно свет или ещё чего приключилось максимум через девяносто минут аренда закончиться и при очередном запросе, если текущее время больше срока_аренды, то запись считается не заблокированной.

Если есть более реальные(правильные) предложения с удовольствием их опробую!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.103 секунд. Запросов: 23.