Здравствуйте Задача заключается в следующем когда пользователь запрашивает данные и ему выводится список обычным selct'ом эти записи должны блокироваться от изменения другими пользователями и разблокироваться только когда пользователь перестал их смотреть либо через промежуток времени. Пробовал select for update но не помогло. Как этого можно добиться?
то есть вы предлагаете что то типо этого Код (Text): 'UPDATE tb1 SET `FlagLock`=1,`FlagNameLock`='.$Name.' WHERE (SELECT * FROM tb1 WHERE `какое то условие` and `FlagLock`=0)' и после такого блокирования производить манипуляции над этой записью сравнивая ее с пользователем и FlagNameLock? Думаете такой способ нормально будет работать?
ну если флаг выставлять как раз в транзакции/блокировке, то мне кажется всё будет хорошо и одновременно двое одну строку не захапают. Можно и без вложенного запроса обойтись. Добавлено спустя 2 минуты 6 секунд: я думаю можно и без транзакции. заапдейтить не глядя часть строк, которые свободны на юзера. потом работаешь с ними. =) еще хорошо бы время залочки тоже писать, чтобы не залипали годами.
можно чуть подробнее про "транзакции/блокировке" толком ненашjл инфы как это реализовывать на php. Вложенный запрос для того чтоб не кто не влез между запросами
транзакции это стандартный механизм мускула. почитайте гденить =) а чтобы не влезли я предложил сразу вслепую фигарить апдейт, забирающий часть свободных строк. тогда уж точно никто не влезет.
что такое транзакция я знаю, но вот применять к php это все как то муторно и глючно и толковых примеров я так и не нашел, может я не так вас понял может вы меня, смысл заблокировать запись не на время выполнения оператора select или update а на время пока пользователь делает с данными манипуляци, то есть он выбрал записей 10 и сидит на них смотрит минут 30 а для остальных они залочены, если я правильно понимаю про транзакции это выглядит так Код (Text): start trunsaction select чето там //начало неявной блокировки commit //конец неявной блокировки строка разблокирована, так происходит ? не в чем не ошибся?
ну флаг же ж поможет короче. А что-то делать со строками для пущей верности можно в транзакциях. Если это не "атомарный" апдейт, который происходит за одно действие.
transaction пишется через A. И ничего там не глючно, и все там ровно и удобно. Можете транзакции через запрос открывать, можете(и это вернее) средствами mysqli управлять процессом. Почитайте, там правда нет ничего сложного.