Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   блокировка записи в БД на изменение в веб приложении (https://javascript.ru/forum/server/18284-blokirovka-zapisi-v-bd-na-izmenenie-v-veb-prilozhenii.html)

igrok 24.06.2011 14:47

блокировка записи в БД на изменение в веб приложении
 
Привет всем,
пишу небольшое веб приложение, ситуация следующая -
есть запись в БД, допустим один юзер загрузил страницу с содержимым этой записи и начал редактировать, в это время второй ее изменил и сохранил, после этого первый юзер делает submit т.е. сохраняет свои изменения, в итоге получается что работа юзера номер 2 потеряна. На уровне БД это делается блокировками записей, но как это можно релизовать в веб приложении если у первого юзера между загрузкой страницы редактирования и сабмитом формы блокировка не сохранится.

P.S. язык php

Всем заранее спасибо

dmitriymar 24.06.2011 15:20

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

igrok 24.06.2011 15:24

блокировка целой таблицы? - это слишком жестоко, а если эта запись -товар, то получается остальные товары тоже нельзя изменять пока кто то один редактирует, получается однопользовательское приложение

dmitriymar 24.06.2011 15:26

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

igrok 24.06.2011 15:30

я просто ответил раньше чем сообщение обновилось :)

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

dmitriymar 24.06.2011 15:33

igrok,
ну mysql позволяет только всю таблицу блокировать-не думаю что есть решения кардинально отличающиеся

igrok 24.06.2011 15:40

innodb позволяет блокировать конкретные записи вроде

в любом случае спасибо за помощь ;)

dmitriymar 24.06.2011 16:16

Цитата:

Сообщение от igrok
innodb позволяет блокировать конкретные записи вроде

та да если порыться в ответвлениях mySql можно найти многое,вопрос с чем придётся распрощаться взамен с отказом от mysam.

Vuzy 04.07.2011 17:07

Помоему если речь идет о конкретной записи (строке) в БД то лучше внести в нее определенный параметр и при запросе на изменение обновлять параметр и устанавливать максимальное время редактирования скажем 5 минут. после чего когда пользователь нажал на кнопку сохранить убирать таймстамп и запись из этого поля.
И добавить проверку таймстампа тоже не помешает. самый оптимальный варинт. Тогда и другие записи будут открыты для редактирования и таблицу закрывать не надо.


Часовой пояс GMT +3, время: 02:24.