1.7.2.4 '--' как начало комментария
Стандартный SQL использует синтаксис C /* this is a comment
*/ для комментариев, и MySQL Server также поддерживает этот синтаксис. MySQL также поддерживает расширения этого синтаксиса, которые позволяют встраивать специфичные для MySQL SQL-запросы в комментарии; см. Раздел 11.7, «Комментарии».
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.