MySQL SQL Formatter
Füge eine MySQL-Abfrage ein — auch eine direkt aus Anwendungs-Logs kopierte, in der die ?-Platzhalter noch stehen — und erhalte lesbares, konsistent formatiertes SQL. Identifier in Backticks und MySQL-spezifische Funktionen bleiben erhalten.
Eine MySQL-Abfrage, vorher und nachher
Die unformatierte Abfrage unten ist das Beispiel aus dem Editor weiter oben, und die Ausgabe ist genau das, was dieser Formatter mit den Standardoptionen dafür liefert. Nichts davon wurde von Hand nachgebessert.
SELECT `u`.`id`, `u`.`name`, count(o.id) AS orders, sum(o.total) AS revenue FROM `users` `u` LEFT JOIN `orders` `o` ON o.user_id = u.id WHERE u.created_at >= ? AND u.status = ? AND o.region IN (?) GROUP BY u.id, u.name HAVING sum(o.total) > ? ORDER BY revenue DESC LIMIT 50 SELECT
`u`.`id`,
`u`.`name`,
count(o.id) AS orders,
sum(o.total) AS revenue
FROM
`users` `u`
LEFT JOIN `orders` `o` ON o.user_id = u.id
WHERE
u.created_at >= ?
AND u.status = ?
AND o.region IN (?)
GROUP BY
u.id,
u.name
HAVING
sum(o.total) > ?
ORDER BY
revenue DESC
LIMIT
50 MySQL-Syntax, die er beherrscht
Ein generischer Formatter verstümmelt dialektspezifische Syntax oder lehnt sie gleich ab. Das sind die MySQL-Konstrukte, gegen die dieser Formatter getestet wird.
? Positionelle Platzhalter werden nach der Spalte und dem Operator gruppiert, bei denen sie stehen, sodass eine zweimal verglichene Spalte nur einmal ausgefüllt wird.
`identifier` Identifier in Backticks behalten ihre Anführung und ihre Schreibweise.
ON DUPLICATE KEY UPDATE MySQL-eigene Anweisungsklauseln werden formatiert statt als undurchsichtiger Block durchgeleitet.
STRAIGHT_JOIN MySQL-Join-Hints und Index-Hints bleiben an ihrer Stelle.
FAQ zum MySQL-Formatter
Kann ich eine Abfrage mit ?-Platzhaltern direkt aus meinen Logs einfügen?
Ja. Das ist der häufige Fall. Die ?-Platzhalter werden erkannt und nach der Spalte gruppiert, mit der sie verglichen werden, sodass eine wiederholte Spalte einmal ausgefüllt wird. Danach kannst du die Ausgabe auf ausgefülltes SQL schalten und eine ausführbare Abfrage erhalten.
Funktioniert das auch für MariaDB?
Ja — wähle MariaDB in der Dialektliste für MariaDB-spezifische Schlüsselwörter, oder nutze MySQL, das die gemeinsame Syntax abdeckt.
Bleibt die Schreibweise von Bezeichnern in Backticks erhalten?
Ja. Die Schreibweise von Schlüsselwörtern und die von Bezeichnern sind getrennte Optionen. Sie können SELECT und JOIN gross schreiben, während eine Spalte wie userProfile ihr camelCase behält. Bei MySQL wiegt das schwerer als anderswo, weil die Gross- und Kleinschreibung von Tabellennamen vom Dateisystem des Servers abhängt.
Kann er eine MySQL-Abfrage wieder auf eine Zeile minifizieren?
Ja. Das Minifizieren staucht die Abfrage zum Zurückkopieren in den Anwendungscode und schreibt niemals Leerzeichen innerhalb eines String-Literals um — ein Vergleich mit einem Wert, der zwei Leerzeichen enthält, liefert danach weiterhin dieselben Zeilen.
Formatiert er ein Fragment aus einer Logzeile?
Ja. Eine unvollständige Abfrage — oder ein blosses WHERE u.created_at >= ? AND u.status = ? — wird ohne das umgebende SELECT formatiert und bearbeitbar gemacht. Genau so sieht die Ausgabe des Slow-Query-Logs und des General Logs von MySQL aus, und genau dafür ist dieser Formatierer gebaut.
Werden ON DUPLICATE KEY UPDATE und Index-Hints unterstützt?
Ja. MySQL-eigene Klauseln werden als echte Klauseln formatiert, statt als unformatierter Block durchgereicht zu werden, und Join- oder Index-Hints wie STRAIGHT_JOIN und FORCE INDEX bleiben an der Tabelle, die sie qualifizieren.