Formatador de SQL para MySQL

Cole uma consulta MySQL — inclusive uma copiada direto dos logs da aplicação, ainda com os marcadores ? — e receba SQL legível e formatado de forma consistente. Identificadores entre acentos graves e funções específicas do MySQL são preservados.

Uma consulta MySQL, antes e depois

A consulta sem formatação abaixo é o exemplo carregado no editor acima, e a saída é exatamente o que este formatador devolve para ela com as opções padrão. Nada foi ajustado à mão.

Colado
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
Saída formatada
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

Sintaxe do MySQL que ele trata

Um formatador genérico destrói a sintaxe específica do dialeto ou simplesmente a recusa. Estas são as construções do MySQL contra as quais este formatador é testado.

?

Marcadores posicionais são agrupados pela coluna e pelo operador ao lado dos quais ficam, então uma coluna comparada duas vezes é preenchida uma só vez.

`identifier`

Identificadores entre acentos graves mantêm as aspas e a caixa.

ON DUPLICATE KEY UPDATE

Cláusulas de instrução exclusivas do MySQL são formatadas em vez de passarem como um bloco opaco.

STRAIGHT_JOIN

Dicas de join e de índice do MySQL são preservadas no lugar.

Perguntas frequentes do formatador de MySQL

Posso colar uma consulta com marcadores ? direto dos meus logs?

Sim. Esse é o caso comum. Os marcadores ? são detectados e agrupados pela coluna com que são comparados, então uma coluna repetida é preenchida uma vez. Depois você pode trocar a saída para SQL com valores e obter uma consulta executável.

Isso funciona para MariaDB também?

Sim — escolha MariaDB na lista de dialetos para palavras-chave específicas do MariaDB, ou use MySQL, que cobre a sintaxe compartilhada.

Ele preserva as maiúsculas de identificadores entre crases?

Sim. O caixa das palavras-chave e o dos identificadores são opções separadas, então você pode deixar SELECT e JOIN em maiúsculas enquanto uma coluna como userProfile mantém o camelCase. No MySQL isso pesa mais do que em outros bancos, porque a sensibilidade a maiúsculas dos nomes de tabela depende do sistema de arquivos do servidor.

Dá para minificar uma consulta MySQL de volta para uma linha?

Sim. A minificação compacta a consulta para colar de volta no código da aplicação e nunca reescreve espaços dentro de um literal de texto — uma comparação com um valor que tem dois espaços continua retornando as mesmas linhas depois de minificada.

Ele formata um trecho tirado de uma linha de log?

Sim. Uma consulta parcial — ou um simples WHERE u.created_at >= ? AND u.status = ? — é formatada e fica editável sem o SELECT em volta. Esse é o formato usual da saída do slow query log e do log geral do MySQL, ou seja, exatamente o caso para o qual este formatador foi feito.

ON DUPLICATE KEY UPDATE e hints de índice são tratados?

Sim. Cláusulas exclusivas do MySQL são formatadas como cláusulas de verdade em vez de passarem como um bloco sem formatação, e hints de junção ou de índice como STRAIGHT_JOIN e FORCE INDEX continuam grudados na tabela que qualificam.