Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте. На сервере есть хранимая процедура. Она обновляет данные пользователя в соответствии с разными условиями (это не совсем важно). Когда процедура вызывается 2 раза, через очень короткие пром времени, практически одновременно, информация в базе меняется 2 раза, и становится не корректной. В моем случае требуется в процедуре, перед началом работы проверить возможно ее копия уже запущенна. Я представляю себе реализацию этого так. В начале процедуры проверяется существует ли глобальная переменная, которая будет иметь имя p1234325 (допустим), где число - ID пользователя, если переменная существует процедура завершает свою работу, если нет, она создает глобальную переменную с таким именем и продолжает свою работу, по окончанию она удаляет созданную глобальну переменную. Вопрос в том возможно ли создавать такую глобальну переменную, которую будет видно не только этому подключению, но и остальным. Если нет с удовольствием ознакомлюсь с Вашими предложениями по этому поводу. Зарание всем спасибо!
Отредактированно cooler (10.06.2010 19:44:37)
Неактивен
Посмотрите на GET_LOCK(), я думаю, что это то, что Вам нужно.
Неактивен
Спасибо, это действительно то, что мне нужно.
Неактивен
Возникает вопрос почему при использовании функции RELEASE_LOCK(puser_id) мускул не хочет компилировать процедуру. Пишет ошибку
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(puser_id);
На использование функций GET_LOCK() и IS_FREE_LOCK() молчит, а вот на RELEASE_LOCK() ругается. Можно ли не удалять блокироку явно по завершению работы процедуры? На сколько я понял она сама удалится при разрыве соединения с мускулом.
Неактивен
Извените, за глупость. Я разобрался. RELEASE_LOCK() - функция, а не процедура.
Неактивен