Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Блокировка строк в БД

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
vice
Отправлено: 09 Декабря, 2010 - 22:17:21
Post Id



Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Окт. 2010  


Помог: 0 раз(а)




Здравствуйте!
Подскажите пожалуйста.
Такой пример.
Допустим клиент открыл у себя на компьютере один документ.
Как сделать так, чтобы на другом компьютере этот же документ открыть
было нельзя, пока на первом компьютере документ открыт?
Что лучше использовать транзакции или GET_LOCK? Если можно примерный скрипт. В гугле очень мало инфы. 2 дня убил, толком ничего не нашел. Огорчение
 
 Top
LEONeso
Отправлено: 09 Декабря, 2010 - 22:31:24
Post Id



Посетитель


Покинул форум
Сообщений всего: 499
Дата рег-ции: Янв. 2010  
Откуда: Россия, Москва


Помог: 1 раз(а)




документ - это файл?


-----
Для некоторых лучший способ написать что-нибудь осмысленное - это сесть _опой на клавиатуру.
 
 Top
vice
Отправлено: 09 Декабря, 2010 - 22:49:08
Post Id



Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Окт. 2010  


Помог: 0 раз(а)




LEONeso пишет:
документ - это файл?

нет это строка в таблице
(Добавление)
Это я так символически сформулировал задачу.
На самом деле есть таблица с строками, в которых лежит информация. Если первый пользователь делает UPDATE одной строки, то строка блокируется. Второй пользователь не может сделать UPDATE. После того как первый поредактировал запись, она становится вообще недоступной никому. Вот где-то так.
 
 Top
Stas.progger
Отправлено: 10 Декабря, 2010 - 08:22:46
Post Id


Новичок


Покинул форум
Сообщений всего: 33
Дата рег-ции: Окт. 2010  


Помог: 0 раз(а)




vice, вообще я бы добавил в вашу таблицу поле UPDATED (enum(0,1))
Если строку уже "использовали", ставим 1.

При выборке используем SELECT ... WHERE `UPDATED` = 0

Для того чтобы другой поток не получил данные уже полученной, но не обновлённой строки используйте SELECT ... FOR UPDATE

Тип таблиц InnoDB
 
 Top
EuGen Администратор
Отправлено: 10 Декабря, 2010 - 10:53:46
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)






-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
vice
Отправлено: 10 Декабря, 2010 - 16:25:53
Post Id



Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Окт. 2010  


Помог: 0 раз(а)




[quote=Stas.progger][/quote]
Stas.progger пишет:
vice, вообще я бы добавил в вашу таблицу поле UPDATED (enum(0,1))
Если строку уже "использовали", ставим 1.

При выборке используем SELECT ... WHERE `UPDATED` = 0

Для того чтобы другой поток не получил данные уже полученной, но не обновлённой строки используйте SELECT ... FOR UPDATE

Stas.progger если возможно, пожалуйста простейший примерчик или ссылку.
 
 Top
vice
Отправлено: 13 Декабря, 2010 - 15:48:24
Post Id



Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Окт. 2010  


Помог: 0 раз(а)




С GET_LOCK у меня не сложилось. Решил задачу используя транзакции. Радость
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB