Russian Qt Forum

Qt => Базы данных => Тема начата: miha-ha от Июнь 13, 2010, 09:42



Название: Запрет редактирования строки таблицы MySql, если данная строка просматривается
Отправлено: miha-ha от Июнь 13, 2010, 09:42
Подскажите как в теории(или практически) реализовать?
Ситуация: один пользователь просматривает запись таблицы, все другие пользователи должны уведомляться, что данная запись заблокирована для изменения таким-то пользователем. Система распределённая БД на сервере, доступ клиентов через инет, клиенты на QT.
Я думал реализовать так: при запросе на редактирование в таблицу BLOCK_REC помещается id записи с указанием пользователя производившего выборку. После оканчания обработки записей пользователь очищает свои записи в таблице BLOCK_REC. При такой схеме перед выбором определенной записи мне достаточно просмотреть таблицу BLOCK_REC и проверить можно ли редактировать, и если нет, то узнать кем заблокирована запись... Но есть очень тонкий момент, который проявляется если пользователь не смог за собой очистить заблокированные записи... например выключили свет ...
Подскажите как решается данный вопрос?


Название: Re: Запрет редактирования строки таблицы MySql, если данная строка просматривается
Отправлено: MoPDoBoPoT от Июнь 13, 2010, 15:52
В MySql есть системные триггеры?
А вообще, с таким вопросом лучше на sql.ru идти.


Название: Re: Запрет редактирования строки таблицы MySql, если данная строка просматривается
Отправлено: linkr от Июнь 13, 2010, 17:13
вопрос интересный, реализовать можно по разному, тоже бы хотелось интересный ответ


Название: Re: Запрет редактирования строки таблицы MySql, если данная строка просматривается
Отправлено: miha-ha от Июнь 15, 2010, 13:40
В MySql есть системные триггеры?
А вообще, с таким вопросом лучше на sql.ru идти.

Спасибо за совет! Попытаю там счастья


Название: Re: Запрет редактирования строки таблицы MySql, если данная строка просматривается
Отправлено: crossly от Июнь 15, 2010, 14:29
select ... for update


Название: Re: Запрет редактирования строки таблицы MySql, если данная строка просматривается
Отправлено: miha-ha от Июнь 15, 2010, 18:03
select ... for update
а как узнать(организовать) каким пользователем заблокирована запись?


Название: Re: Запрет редактирования строки таблицы MySql, е&#
Отправлено: Nimbus от Июнь 16, 2010, 06:56
а как узнать(организовать) каким пользователем заблокирована запись?
Скорее всего - никак. Я в Оракле столкнулся с такой же проблемой. Для этого нужен доступ к просмотру всех транзакций в СУБД, а это уже по-видимому привилегия администратора. Либо, всё таки ведите ещё одну таблицу в своей БД, в которой отражается состояние заблокированных записей и пользователей их заблокировавших.


Название: Re: Запрет редактирования строки таблицы MySql, если данная строка просматривается
Отправлено: crossly от Июнь 16, 2010, 10:05
простите.... а зачем знать кто заблокировал запись?


Название: Re: Запрет редактирования строки таблицы MySql, если данная строка просматривается
Отправлено: xokc от Июнь 16, 2010, 20:23
Видимо, чтобы себя самого не заблокировать


Название: Re: Запрет редактирования строки таблицы MySql, если данная строка просматривает
Отправлено: Nimbus от Июнь 17, 2010, 04:17
Видимо, чтобы себя самого не заблокировать
Вообще-то бывают такие случаи, когда человек заблокировал запись и ушёл по своим делам, а другие не могут получить к ней доступ. Для этого и надо, чтобы потом знать кого пинать, когда работа стоит.


Название: Re: Запрет редактирования строки таблицы MySql, если данная строка просматривается
Отправлено: crossly от Июнь 17, 2010, 09:57
и что вы будите бегать по офису.... и вырубать проги у тех кто залочил... ??


Название: Re: Запрет редактирования строки таблицы MySql, если данная строка просматривает
Отправлено: Nimbus от Июнь 17, 2010, 11:58
и что вы будите бегать по офису.... и вырубать проги у тех кто залочил... ??
Конечно, если БД таких масштабов, что к ней подключены сотрудники из нескольких офисов в городе (в моём случае так), то проще позвонить начальнику нужного отдела или самому сотруднику, ну а так, чего бы и не побегать ;)


Название: Re: Запрет редактирования строки таблицы MySql, если данная строка просматривается
Отправлено: crossly от Июнь 17, 2010, 12:11
хороший подход....


Название: Re: Запрет редактирования строки таблицы MySql, если данная строка просматривается
Отправлено: miha-ha от Июль 10, 2010, 23:24
Сделал так(может кому пригодится):
При выборе записи заноситься информация в таблицу БЛОК_РЕК (имя_таблицы, пользователь_заблокировавший, ид_заблокированной_записи, срок_аренды)
срок_аренды - это метка времени = текущее время + 90секунд;
При просмотре записи больше минуты аренда продлевается опять на 90секунд.

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

Если есть более реальные(правильные) предложения с удовольствием их опробую!