Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.05.2014, 06:15   #1
Lokos
Форумчанин
 
Регистрация: 29.09.2009
Сообщений: 587
По умолчанию Блокировка таблицы INNODB в MySql

Здравствуйте.
Интересует следующий момент как происходит неявное и явное блокирование записи в таблице. То есть необходимо сделать так чтоб когда пользователь читает какие либо записи скажем выбранные вот так
Код:
SELECT * FROM tb1 WHERE zn>1 and zn<1
Другие пользователи не могли внести в них изменения
Прочитал статью якобы не явное блокирование происходит при каждом selecte либо update и сервер выставляет его автоматом.
попробовал смоделировать такую ситуацию и конечно сервер не чего мне не заблокировал, возможно я что то не так делал
вот код моей ситуации
1 запрос на выбор
Код:
select * from tb1 where id=1
второй на обновление
Код:
update tb1 set `zn`=2 where id=1
и еще почитал такую вещ что блокировка будет идти до тех пор пока не будет закончена ссесия, что под этим конкретно подразумевается и как это реализуется на пхп, читал мануалы но внятного описания как всегда нет(
Lokos вне форума Ответить с цитированием
Старый 14.05.2014, 07:59   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Вот так: http://dev.mysql.com/doc/refman/5.0/...ing-reads.html
Цитата:
блокировка будет идти до тех пор пока не будет закончена ссесия
Т.е. пока к базе подключение не закроется. Это не имеет отношение к сессиям в ПХП. Я не знаю как ПХП работает, но это интерпретатор, а значит от по запросу подключится к БД, сделает свои дела и отключится - тогда блокировка и должна будет сняться. Врядли он будет держать блок пока юзер в браузере рассматривает таблицу
I'm learning to live...

Последний раз редактировалось Stilet; 14.05.2014 в 08:02.
Stilet вне форума Ответить с цитированием
Старый 14.05.2014, 08:10   #3
Lokos
Форумчанин
 
Регистрация: 29.09.2009
Сообщений: 587
По умолчанию

мда печаль((( цель в том чтоб блочить записи пока юзер смотрит на них в браузере и думает делать что с ними или нет.
Вообщем что придумал я.
Создаем некую табличку для блока куда пишуться ид записей которые выбирает пользователь, а записи для пользователя выбираются по его условию + id not in (select id из таблички для блока)
когда получаем выборку для пользователя то ид этих записей заносим в табличку для блока чтоб их не видили остальные а по концу работы удаляем. Как считаете будет нормально работать?
Lokos вне форума Ответить с цитированием
Старый 14.05.2014, 09:32   #4
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,150
По умолчанию

вряд ли...
и непонятна причина такой блокировки..... типа чтоб одновременно одну и ту же запись чтоль не редактировали?
ADSoft вне форума Ответить с цитированием
Старый 14.05.2014, 09:39   #5
Lokos
Форумчанин
 
Регистрация: 29.09.2009
Сообщений: 587
По умолчанию

именно для этого. Чтоб когда человек просматривает не кто не мог поменять данные. Тот мутный алгоритм немного упростил
Пользователь выбирает гору записей но редактировать может только по одной, когда начинает редактирование меняется определенный ключ дата и время редактирования, это поможет заблокировать запись и сделать авто разблокировку если пользователя произойдет обрыв связи или он закроет страничку
Lokos вне форума Ответить с цитированием
Старый 14.05.2014, 10:21   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Пользователь выбирает гору записей но редактировать может только по одной, когда начинает редактирование меняется определенный ключ дата и время редактирования, это поможет заблокировать запись и сделать авто разблокировку если пользователя произойдет обрыв связи или он закроет страничку
По опыту скажу что это неудачный способ. Костыли пойдут когда пользователей будет много.
Мне кажется нужно заново продумать эту схему так чтоб от блокировок избавиться. Кстати если не ошибаюсь на ASP.NET есть возможность держать сессии. IIS стабильно будет блочить нужные записи, ибо он не работает с интерпретатором, а использует DLLки.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.05.2014, 10:44   #7
buriat
Форумчанин
 
Регистрация: 28.06.2010
Сообщений: 189
По умолчанию

В таблице с записями создать поле version (int) default 0, при каждом update увеличивать значение на 1.
При субмите юзером формы на сайте, проверить поменялось ли значение version. Если поменялось, то выдать сообщение ("данные устарели, обновить" или как-то так).
buriat вне форума Ответить с цитированием
Старый 14.05.2014, 11:13   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
При субмите
Все равно устаревание данных получится. В этом случае поставить в таймере запрос придется. Да и это тоже не панацея. Косяков там можно наделать неслабо.
Все равно я думаю что проще будет пересмотреть стратегию.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.05.2014, 11:20   #9
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,755
По умолчанию

А select for update в MySQL есть? Боюсь представить, как это будет работать в веб-приложении.
Vapaamies вне форума Ответить с цитированием
Старый 14.05.2014, 11:44   #10
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

Цитата:
мда печаль((( цель в том чтоб блочить записи пока юзер смотрит на них в браузере и думает делать что с ними или нет.
Это фигня, смотри глобальнее. "юзера в одно времяза упдейтят таблицу Или ещёкруче:
1. удалил
2. заупдейтил удаленную.

Цитата:
именно для этого. Чтоб когда человек просматривает не кто не мог поменять данные. Т
А они и не изменятся, если у вас там не AJAX.

p.S. сделайте каждому юзеру отдельную таблицу и пусть радуется. 1 таблица и 100500 человек одновременно это идиотизмв высшей степени, если таблица не чисто информационная.

Последний раз редактировалось Человек_Борща; 14.05.2014 в 11:47.
Человек_Борща вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
INSERT в MySQl базу типа InnoDB. Кодировка. webber9989 PHP 0 09.01.2014 14:45
Конфигурация MySQL InnoDB stepka SQL, базы данных 0 05.06.2011 15:00
Блокировка таблицы Liones БД в Delphi 5 16.07.2010 11:45
блокировка таблицы при одновременном доступе dalien БД в Delphi 3 12.08.2009 16:44