Назад | Перейти на главную страницу

Добавление хранимой процедуры MySQL вызывает состояние отсутствия ответа

Я использую Windows 7 Ultimate 32bit + xampp 1.7.2 [MySQL v5.1.37]

Это моя хранимая процедура:

delimiter //
CREATE PROCEDURE updatePoints(IN parentid INT(5),IN userid INT(5))
DECLARE chpoints INT(5);
BEGIN
 SELECT points INTO chpoints FROM quiz_challenges WHERE id = parentid;
 UPDATE quiz_users SET points = points + chpoints WHERE forumid=userid;
END;
//                                   
delimiter ;

Сначала при создании хранимой процедуры отображалась ошибка 1064. Я добавил часть разделителей, и когда я попытался запустить запрос от phpmyadmin, Firefox перешел в состояние не отвечает. После этого я запустил Internet Explorer и попытался открыть свои страницы, использующие ту же базу данных, все работало нормально. Однако я попытался открыть phpmyadmin, и IE тоже перестал отвечать. Я перезапустил оба сервера. Позже перезагрузил компьютер. Пробовал снова, но его поведение такое же.

Так что же не так с этим крошечным кодом? Мне не хватает чего-то, что может вызывать бесконечный цикл?

Спасибо

По моему опыту, phpmyadmin не любит использование delimiter // внутри окна запроса SQL. Вместо этого в окне запроса SQL phpmyadmin есть текстовое поле «разделитель», содержимое которого установлено в «;» по умолчанию. Введите "//" в это текстовое поле вместо ";" и попробуйте выполнить запрос с delimiter // и delimiter ; строки опущены.

НАБЛЮДЕНИЕ №1

Заказ неверен. В DECLARE chpoint INT(5) должно быть после BEGIN, не раньше, чем

delimiter //
CREATE PROCEDURE updatePoints(IN parentid INT(5),IN userid INT(5))
BEGIN
 DECLARE chpoints INT(5);
 SELECT points INTO chpoints FROM quiz_challenges WHERE id = parentid;
 UPDATE quiz_users SET points = points + chpoints WHERE forumid=userid;
END;
//                                   
delimiter ;

НАБЛЮДЕНИЕ № 2

Вы должны убедиться в следующем quiz_users

  • forum_id индексируется
  • points не индексируется (Правильно, я сказал, что не индексируется, потому что значение будет увеличиваться и заставит BTREE для индекса этого столбца перетасовать место этого ключа в индексе).

НАБЛЮДЕНИЕ № 3

Если сценарий PHP повторяется parentid и userid ценности, БОЛЬШОЙ ОЙ !!!

Это будет означать, что сеанс браузера выполняет циклические обходы для передачи каждого вызова хранимой процедуре. Вы должны подумать о прохождении всех parentid и userid комбинаций в таблице и позволяя хранимой процедуре обрабатывать их на стороне сервера, выполняя двусторонние обходы из сеанса браузера.