Я использую 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 ;
строки опущены.
Заказ неверен. В 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 ;
Вы должны убедиться в следующем quiz_users
forum_id
индексируетсяpoints
не индексируется (Правильно, я сказал, что не индексируется, потому что значение будет увеличиваться и заставит BTREE для индекса этого столбца перетасовать место этого ключа в индексе).Если сценарий PHP повторяется parentid
и userid
ценности, БОЛЬШОЙ ОЙ !!!
Это будет означать, что сеанс браузера выполняет циклические обходы для передачи каждого вызова хранимой процедуре. Вы должны подумать о прохождении всех parentid
и userid
комбинаций в таблице и позволяя хранимой процедуре обрабатывать их на стороне сервера, выполняя двусторонние обходы из сеанса браузера.