SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 10.06.2010 19:44:24

cooler
Завсегдатай
Зарегистрирован: 14.01.2010
Сообщений: 52

Глобальные переменные

Здравствуйте. На сервере есть хранимая процедура. Она обновляет данные пользователя в соответствии с разными условиями (это не совсем важно). Когда процедура вызывается 2 раза, через очень короткие пром времени, практически одновременно, информация в базе меняется 2 раза, и становится не корректной. В моем случае требуется в процедуре, перед началом работы проверить возможно ее копия уже запущенна. Я представляю себе реализацию этого так. В начале процедуры  проверяется существует ли глобальная переменная, которая будет иметь имя p1234325 (допустим), где число - ID пользователя, если переменная существует процедура завершает свою работу, если нет, она создает глобальную переменную с таким именем и продолжает свою работу, по окончанию она удаляет созданную глобальну переменную. Вопрос в том возможно ли создавать такую глобальну переменную, которую будет видно не только этому подключению, но и остальным.  Если нет с удовольствием ознакомлюсь с Вашими предложениями по этому поводу. Зарание всем спасибо!

Отредактированно cooler (10.06.2010 19:44:37)

Неактивен

 

#2 10.06.2010 20:11:37

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Глобальные переменные

Посмотрите на GET_LOCK(), я думаю, что это то, что Вам нужно.

Неактивен

 

#3 10.06.2010 20:19:57

cooler
Завсегдатай
Зарегистрирован: 14.01.2010
Сообщений: 52

Re: Глобальные переменные

Спасибо, это действительно то, что мне нужно.

Неактивен

 

#4 10.06.2010 20:31:29

cooler
Завсегдатай
Зарегистрирован: 14.01.2010
Сообщений: 52

Re: Глобальные переменные

Возникает вопрос почему при использовании функции  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() ругается. Можно ли не удалять блокироку явно по завершению работы процедуры? На сколько я понял она сама удалится при разрыве соединения с мускулом.

Неактивен

 

#5 10.06.2010 20:33:53

cooler
Завсегдатай
Зарегистрирован: 14.01.2010
Сообщений: 52

Re: Глобальные переменные

Извените, за глупость. Я разобрался. RELEASE_LOCK() -  функция, а не процедура.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson