Spec-Zone .ru
спецификации, руководства, описания, API

1.8.5.5. '--'как Запуск Комментария

Стандартный SQL использует синтаксис C /* this is a comment */ для комментариев, и MySQL Server поддерживает этот синтаксис также. MySQL также поддерживает расширения этого синтаксиса, которые позволяют специфичному для MySQL SQL быть встроенным в комментарий, как описано в Разделе 9.6, "Синтаксис Комментария".

Стандартный SQL использует"--"как последовательность запускать-комментария. MySQL Server использует"#"как символ комментария запуска. MySQL Server 3.23.3 и также поддерживает разновидность"--"стиль комментария. Таким образом,"--"последовательность запускать-комментария должна сопровождаться пространством (или управляющим символом, таким как новая строка). Пространство обязано предотвращать проблемы с автоматически сгенерированными SQL-запросами, которые используют конструкции такой в качестве следующего, где мы автоматически вставляем значение оплаты за payment:

UPDATE account SET credit=credit-payment

Рассмотрите о том, что происходит если payment имеет отрицательную величину такой как -1:

UPDATE account SET credit=credit--1

credit--1 допустимое выражение в SQL, но"--"интерпретируется как запуск комментария, часть выражения отбрасывается. Результатом является оператор, у которого есть абсолютно различное значение чем предназначенный:

UPDATE account SET credit=credit

Оператор не вызывает изменения в значении вообще. Это иллюстрирует что, разрешая комментарии запуститься с"--"может иметь серьезные последствия.

Используя нашу реализацию требует пространства после"--"для этого, чтобы быть распознанным как последовательность запускать-комментария в MySQL Server 3.23.3 и более новый. Поэтому, credit--1 безопасно использовать.

Другая безопасная функция - то, что mysql клиент командной строки игнорирует строки, которые запускаются с"--".

Следующая информация релевантна, только если Вы выполняете версию MySQL ранее чем 3.23.3:

Если у Вас есть сценарий SQL в текстовом файле, который содержит"--"комментарии, следует использовать утилиту замены следующим образом, чтобы преобразовать комментарии, чтобы использовать"#"символы прежде, чем выполнить сценарий:

shell> replace " --" " #" <
        text-file-with-funny-comments.sql \         | mysql db_name

Это более безопасно чем выполнение сценария обычным способом:

shell> mysql db_name < text-file-with-funny-comments.sql

Можно также отредактировать файл сценария "на месте", чтобы измениться"--"комментарии к"#"комментарии:

shell> replace " --" " #" --
        text-file-with-funny-comments.sql

Возвратите их с этой командой:

shell> replace " #" " --" --
        text-file-with-funny-comments.sql

См. Раздел 4.8.2, "замена — Утилита Строковой замены".