Standard-SQL verwendet die C-Syntax /* This is a
Comment */
für Kommentare, und auch MySQL Server
unterstützt diese Syntax. Ferner unterstützt MySQL
Erweiterungen dieser Syntax, die die Einbettung
MySQL-spezifischen SQL-Codes in den Kommentar gestatten. Siehe
auch Abschnitt 9.4, „Kommentar“.
Als Startkommentarsequenz benutzt Standard-SQL
‘--
’. MySQL Server setzt hingegen
‘#
’ als Startkommentarzeichen.
MySQL Server 3.23.3 und höher unterstützen zudem eine
Variante des Kommentarstils
‘--
’. Das bedeutet, dass der
Startkommentarsequenz ‘--
’ ein
Leerzeichen (oder ein Steuerzeichen wie etwa der
Zeilenwechsel) folgen muss. Das Leerzeichen ist erforderlich,
um Probleme mit automatisch erzeugten SQL-Abfragen zu
vermeiden, die Konstrukte wie das folgende verwenden, in dem
wir in !payment!
automatisch eine
Rechnungssumme einsetzen:
UPDATE account SET credit=credit-!payment!
Überlegen Sie einmal, was passieren würde, wenn
payment
einen negativen Wert wie etwa
-1
hätte:
UPDATE account SET credit=credit--1
credit--1
ist in SQL ein zulässiger
Ausdruck, aber ‘--
’ wird als
Start eines Kommentars interpretiert – ein Teil des
Ausdrucks wird also verworfen! Das Ergebnis ist eine
Anweisung, die eine vollständig andere Bedeutung hat als
ursprünglich vorgesehen:
UPDATE account SET credit=credit
Diese Anweisung erzeugt überhaupt keine Werteänderung! So
lässt sich veranschaulichen, dass es erhebliche Folgen haben
könnte, wenn man ‘--
’ als
Startkommentarsequenz zulassen würde.
Wenn man unsere in MySQL 3.23.3 und höher vorhandene
Implementierung verwendet, bei der auf
‘--
’ zwingend ein Leerzeichen
folgen muss, damit die Startkommentarsequenz als solche
erkannt wird, ist credit--1
tatsächlich
sicher.
Eine weiteres Sicherheitsmerkmal besteht darin, dass der
Befehlszeilenclient mysql Zeilen ignoriert,
die mit ‘--
’ beginnen.
Die nachfolgenden Informationen sind nur von Bedeutung, wenn Sie eine MySQL-Version vor 3.23.3 verwenden:
Wenn Sie ein SQL-Skript, das Kommentare des Typs
‘--
’ enthält, als Textdatei
gespeichert haben, dann sollten Sie das Utility
replace wie folgt verwenden, um die
Kommentare so umzuwandeln, dass Sie das Zeichen
‘#
’ verwenden, bevor Sie das
Skript ausführen:
shell>replace " --" " #" < text-file-with-funny-comments.sql \
| mysql
db_name
Dies ist sicherer, als das Skript auf übliche Weise auszuführen:
shell> mysql db_name
< text-file-with-funny-comments.sql
Sie können die Skriptdatei auch „an Ort und
Stelle“ bearbeiten, damit die Kommentare des Typs
‘--
’ in
‘#
’-Kommentare umgewandelt
werden:
shell> replace " --" " #" -- text-file-with-funny-comments.sql
Mit folgendem Befehl machen Sie die Änderung rückgängig:
shell> replace " #" " --" -- text-file-with-funny-comments.sql
Siehe auch Abschnitt 8.17, „replace — Hilfsprogramm für String-Ersetzungen“.
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.