Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Variáveis globais e locais no MySQL

Recentemente vi que existem algumas variáveis globais (exemplo, @@server_id) e outras que podemos criar para armazenar um valor de consulta no SQL (exemplo, @valor). Perguntas: 01. Onde consigo uma lista com as variáveis globais do MySQL, inclusive com uma explicação da função da mesma? 02. Quais são os tipos de variáveis locais/usuário que existem? 03. É possível armazenar em uma variável local o resultado de uma query que tenha várias linhas e colunas? Algo do tipo:

SELECT  * FROM tabela1 INTO @resultado;

Ou ainda:

SET @resultado:= (SELECT * FROM tabela1);
select @resultado;

Select retornando apenas 1 valor funciona, mas e quando o resultado for uma tabela?

4 respostas
solução!

Boa tarde Lucas!

1) Para ter acesso à lista de variáveis globais do MySQL, você pode executar esse comando no seu terminal (se você estiver utilizando Windows):

mysql -u root -p show global variables > C:\Users\%username%\Desktop\variaveis_globais.txt

Ele vai salvar na sua área de trabalho o arquivo variaveis_globais.txt.

Para saber a função de cada variável, no manual do MySQL você deve encontrar isso.

http://ftp.nchu.edu.tw/MySQL/doc/refman/4.1/pt/system-variables.html

2) Existem variáveis globais (GLOBAL) e locais (LOCAL ou SESSION)

3) Creio que não, pois fiz alguns testes aqui. Veja o resultado:

Executando a query que retorna um único registro:

select nome from livros where id=1 into @teste_variaveis;

E depois exibindo o valor da variável criada:

select @teste_variaveis;

+------------------+
| @teste_variaveis |
+------------------+
| algoritmos       |
+------------------+
1 row in set (0.00 sec)

Ao tentar incluir duas colunas na query dá erro:

select id,nome from livros where id=1 into @teste_variaveis;

ERROR 1222 (21000): The used SELECT statements have a different number of columns

E ao tentar executar uma query com mais de uma linha, também dá erro:

select nome from livros into @teste_variaveis;
ERROR 1172 (42000): Result consisted of more than one row

Eu nunca precisei utilizar variáveis no MySQL. Ao ler sobre, não vi muita utilidade, mas aí li um pouco mais e achei isso:

https://imasters.com.br/artigo/3071/mysql/usando-variaveis-no-mysql

Esses testes eu também tinha feito, achei que houvesse algum tipo de variável que pudesse ser usada temporariamente para armazenar uma consulta. Estou tentando trabalhar com MySQL numa arquitetura de vários mestres e 1 escravo. Li a respeito sobre multi-source replication, recurso disponível a partir da versão 5.6. Meu objetivo final é concentrar em um banco de dados central as informações vinda de vários mestres em uma única tabela. Gostaria de fazer isso usando recurso de replicação de dados ou utilizando stored procedure.

Obrigado pelos esclarecimentos!

Bom dia Lucas! Não há de quê!