У меня есть node.js-сервер, который использует пул соединений node-mysql для запроса базы данных MySQL.Как предотвратить переменные MySQL, определяемые пользователем, столкновение
Мне нужно сделать запрос SELECT
, который использует пользовательскую переменную для добавления суммы предыдущих строк. Перед запросом, я SET
переменных для инициализации в 0.
SET @sum:=0;
SELECT *, @sum := @sum + `value` AS SUM FROM `table`;
Запрос работает как ожидался, но я волнуюсь, что произойдет, если есть несколько запросов на мой сервер узла одновременно. Сервер выполнит несколько запросов. Будут ли они сталкиваться друг с другом и влиять друг на друга, каждый из которых увеличивает одну и ту же переменную? И если да, как я могу это предотвратить?
В лучшем случае сценарий должен ограничивать область действия переменной только одним запросом SELECT
. Это позволило бы удалить заявление SET
и обернуть @sum
в ISNULL
. Таким образом, результат будет
SELECT *, @sum := ISNULL(@sum,0) + `value` AS SUM FROM `table`;
Но я не знаю, как ограничить сферу так что в конце этого запроса @sum
остается на конечное значение и для следующего запроса, это не null
и так Безразлично 't увеличивать с 0 снова.
В любом случае, я могу просто оставить SET
, но вам нужно убедиться, что несколько запросов, использующих одно и то же соединение, не влияют друг на друга. Я не знаю, как именно MySQL обрабатывает запросы, поэтому, возможно, это даже не проблема, но я должен быть уверен.
Благодарим за помощь!