Spec-Zone.ru › MySQL 9.2

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

Spec-Zone.ru

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