Russian Qt Forum
Июля 02, 2025, 01:43 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Запрет редактирования строки таблицы MySql, если данная строка просматривается  (Прочитано 11141 раз)
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.02 секунд. Запросов: 19.