Spec-Zone .ru
спецификации, руководства, описания, API
|
Стандартный 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