1.6.2.4 '--' как начало комментария
Стандартный SQL использует синтаксис C /* this is a comment
*/ для комментариев, и MySQL Server также поддерживает этот синтаксис. MySQL также поддерживает расширения этого синтаксиса, которые позволяют встраивать специфичный для MySQL SQL в комментарий; см. раздел 9.6, «Комментарии».
MySQL Server также использует # в качестве символа начала комментария. Это нестандартно.
Стандартный SQL также использует “--” в качестве последовательности начала комментария. MySQL Server поддерживает вариант стиля комментариев --; последовательность начала комментария -- принимается как таковая, но должна быть после нее пробел, например, пробел или перевод строки. Пробел призван предотвратить проблемы с сгенерированными SQL-запросами, использующими конструкции, такие как следующая, которая обновляет баланс, чтобы отразить списание:
UPDATE account SET balance=balance-charge
WHERE account_id=user_id
Рассмотрим, что произойдёт, если charge имеет отрицательное значение, например, -1, что может быть в случае, если на счёт был зачислен платёж. В этом случае сгенерированная команда выглядит так:
UPDATE account SET balance=balance--1
WHERE account_id=5752;
balance--1 — это допустимый стандартный SQL, но -- интерпретируется как начало комментария, и часть выражения отбрасывается. Результатом является команда, имеющая совершенно другое значение, чем задумывалось:
UPDATE account SET balance=balance
WHERE account_id=5752;
Эта команда вообще не производит изменений в значении. Чтобы предотвратить это, MySQL требует пробела после --, чтобы он распознавался как последовательность начала комментария в MySQL Server, так что выражение, такое как balance--1, всегда безопасно для использования.
© 2025 Oracle
Licensed under the GPLv2 License.