Por que o MySQL retorna literais?

1. Por que o MySQL retorna literais?

George
Leonhart

(usa Outra)

Enviado em 05/02/2014 - 22:08h

Boa noite pessoal. Recentemente descobri que é possível fazer no MySQL uma consulta do tipo:

SELECT 1,2,3,4 FROM tabela;

E como resultado ela retorna:

1 2 3 4
1 2 3 4
1 2 3 4

Sei que são retornadas 3 linhas porque minha tabela possui 3 registros, mas gostaria de saber porque o MySQL permite fazer isso, se isso tem alguma utilidade e se é possível ativar alguma diretiva que proíba fazer esse tipo de consulta, visto que ela pode ser maliciosa.

Agradeço desde já.



  


2. Re: Por que o MySQL retorna literais?

Eduardo Leandro
eduardoleandro

(usa Debian)

Enviado em 24/02/2014 - 18:29h

Leonhart escreveu:

Boa noite pessoal. Recentemente descobri que é possível fazer no MySQL uma consulta do tipo:

SELECT 1,2,3,4 FROM tabela;

E como resultado ela retorna:

1 2 3 4
1 2 3 4
1 2 3 4

Sei que são retornadas 3 linhas porque minha tabela possui 3 registros, mas gostaria de saber porque o MySQL permite fazer isso, se isso tem alguma utilidade e se é possível ativar alguma diretiva que proíba fazer esse tipo de consulta, visto que ela pode ser maliciosa.

Agradeço desde já.


Caro Leonhart,

Eu já tirei proveito deste tipo de comportamento do Mysql nas consultas, acredito que seja permitido inclusive em outros bancos de dados.
Bom, eu precisei de uma tabela mestre usando datas, para exibir resultados agrupados por data de outra tabela, sendo que deveriam ser exibidas todas as datas dentro de um mês, inclusive as datas sem registro:

Para não precisar de criar laços nem views para isso, eu usei uma tabela temporária:


SET @dt:=CURDATE(); /* variavel que guarda a data */
CREATE TEMPORARY TABLE tmp_datas SELECT @dt:=DATE_ADD(@dt, INTERVAL 1 DAY) dia FROM tabela LIMIT 30; /* tabela temporaria tmp_datas com periodo selecionado */
SELECT * FROM tmp_datas;

OBS.: lembrando que a tabela que irá referenciar deverá conter um numero de registros igual ou maior ao que voce quer usar. No meu caso, precisei apontar para uma tabela que tivesse 30 registros no minimo para que eu tivesse 30 linhas de retorno.


Este é um exemplo para você usar este tipo de comportamento "permissivo".
Se seu banco de dados está protegido de outras pessoas, com os GRANTS definidos por host e usuário, então você pode ficar tranquilo quanto a essa "permissividade" proposta pelo banco. Pode ser que haja alguma diretiva, que possa inibir isso, mas desconheço e nem encontrei nada.
Se for para sua aplicação, e realmente muito necessário, sugiro que você tente fazer o tratamento sem usar o SGDB.




3. Re: Por que o MySQL retorna literais?

George
Leonhart

(usa Outra)

Enviado em 24/02/2014 - 18:58h

Bastante interessante sua maneira de usar esse tipo de Select. Obrigado pela explicação. Ficarei no aguardo de que alguém possa me explicar porque isso é permitido. Caso demore muito, marcarei como resolvido e escolherei sua resposta como a melhor. =D


4. Re: Por que o MySQL retorna literais?

Eduardo Leandro
eduardoleandro

(usa Debian)

Enviado em 24/02/2014 - 20:02h

Leonhart escreveu:

Bastante interessante sua maneira de usar esse tipo de Select. Obrigado pela explicação. Ficarei no aguardo de que alguém possa me explicar porque isso é permitido. Caso demore muito, marcarei como resolvido e escolherei sua resposta como a melhor. =D


Eu realmente nem vejo como bloquear a forma como você esta fazendo a consulta.
O perigo talvez esteja na verdade em fazer uma select sem filtros, como você fez, em uma tabela muito grande, mas, até ai, isso é normal para qualquer banco de dados.

E no caso, se estou entendo direito, o fato de poder informar valores em lugar de colunas e que não correspondem a tabela, também algo normal e até comum em consultas, quando precisamos de valores fixos, como num layout para exportar os dados.

Portanto não tem porque se preocupar, pois, sinceramente, não vejo perigo na sua consulta, mesmo ela podendo ser uma tabela muito grande !

Abraços !






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts