Spec-Zone.ru › MySQL 5.7

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.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/ansi-diff-comments.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API