DATABASE()
Retorna o nome do banco de dados atual:
mysql> SELECT DATABASE();
-> 'test'
Se nenhum banco de dados estiver selecionado,
DATABASE()
retorna
NULL
a partir do MySQL 4.1.1, e uma
string vazia em versões anteriores.
USER()
,
SYSTEM_USER()
,
SESSION_USER()
Retorna o nome do usuário MySQL e nome de máquina atual:
mysql> SELECT USER();
-> 'davida@localhost'
O valor indica o nome do usuário que você especificou ao conectar ao servidor e a máquina cliente da qual você se conectou. (Antes do MySQL versão 3.22.11, o valor da função não inclui o nome da máquina cliente.)
Você pode extrair apenas a parte do nome do usuário, desconsiderando se o valor inclui a parte do nome de máquina, desta forma:
mysql> SELECT SUBSTRING_INDEX(USER(),"@",1);
-> 'davida'
CURRENT_USER()
Retorna o nome do usuário e o nome de máquina com os
quais a sessão atual foi autenticada. Este valor
corresponde a conta que é usada para acessar seu
privilégio de acessos. Ela pode ser diferente do valor de
USER()
.
mysql>SELECT USER();
-> 'davida@localhost' mysql>SELECT * FROM mysql.user;
-> ERROR 1044: Access denied for user: '@localhost' to database 'mysql' mysql>SELECT CURRENT_USER();
-> '@localhost'
O exemplo ilustra que embora o cliente tenha especificado
um nome de usuário davida
(como
indicado pelo valor da função
USER()
), o servidor autenticou o
cliente usando uma conta de usuário anônimo (como visto
pela parte vazia no nome de usuário do valor
CURRENT_USER()
). Um modos de isto
ocorrer é que não haja uma conta listada na tabela de
permissões para davida
.
PASSWORD(str)
,
OLD_PASSWORD(str)
Calcula a senha a partir de senha str
em texto puro. Está é a função que é utilizada para
criptografar a senha do MySQL para armazenamento na coluna
Password
da tabela de permissões
user
mysql> SELECT PASSWORD('badpwd');
-> '7f84554057dd964b'
A criptografia de PASSWORD()
não e
reversível.
PASSWORD()
não realiza a criptografia
da senha da mesa maneira que as senhas Unix são
criptografadas. Veja ENCRYPT()
.
Note: A função
PASSWORD()
é usada pelo sistema de
autentificação no servidor MySQL, você
NÃO
deve uitlizá-las em suas
próprias aplicações. Para este propósito utilize
MD5()
ou SHA1()
.
Veja também RFC-2195
para maiores
informações sobre o tratamento de senha e autenticação
segura em suas aplicações.
ENCRYPT(str[,salt])
Criptografa str
utilizando a chamada de
sistema crypt()
do Unix. O argumento
salt
deve ser uma string com dois
caracteres. (Na versão 3.22.16 do MySQL,
salt
deve ser maior que dois
caracteres.)
mysql> SELECT ENCRYPT("hello");
-> 'VxuFAJXVARROc'
ENCRYPT()
ignora tudo depois dos
primeiros 8 caracteres de str
, pelo
menos em alguns sistemas. Este comportamento é
determinado pela implementação da chamada de sistema
crypt()
.
Se crypt()
não estiver disponível no
seu sistema, ENCRYPT()
sempre retorna
NULL
. Devido a isto recomendamos que
você use MD5()
ou
SHA1()
em vez dos existentes em sua
plataforma.
ENCODE(str,senha_str)
Criptografa str
usando
senha_str
como a senha. Para
descriptografar o resultado, utilize
DECODE()
.
O resultado é uma string binária do mesmo tamanho de
str
. Se você deseja salvá-la em uma
coluna, use uma coluna do tipo BLOB
.
DECODE(cript_str,senha_str)
Descriptografa o string criptografada
cript_str
usando
senha_str
como a senha.
cript_str
deve ser uma string retornada
de ENCODE()
.
MD5(string)
Calcula um checksum MD5 de 128 bits para a string. O valor é retornado como um número hexadecimal de 32 digitos que pode, por exemplo, ser usado como uma chave hash:
mysql> SELECT MD5("testing");
-> 'ae2b1fca515949e5d54fb22b8ed95575'
Este é o "RSA Data Security, Inc. MD5 Message-Digest Algorithm".
SHA1(string)
,
SHA(string)
Calcula um checksum SHA1 de 160 bit para a string, como
descrito no RFC 3174 (Algoritmo Hash de Segurança). O
valor é retornado como um número hexadecial de 40
digitos, or NULL
no caso do argumento
ser NULL
. Uma das possibilidades para
o uso desta função é a chave hash. Você também pode
usá-lo como uma função segura de criptografia para
armazenar senhas.
mysql> SELECT SHA1("abc");
-> 'a9993e364706816aba3e25717850c26c9cd0d89d'
SHA1()
foi adicionado na versão 4.0.2,
e pode ser considerada um equivalente ao
MD5()
com criptografia mais segura.
SHA()
é um sinônimo para
SHA1()
.
AES_ENCRYPT(string,string_chave)
,
AES_DECRYPT(string,string_chave)
Estas funções permitem criptografia/descriptografia de dados usando o algoritmo oficial AES (Padrão Avançado de Criptografia), antes conhecido como Rijndael. Criptgrafia com uma chave de 128 bits podem ser usadas, mas você pode extendê-la para 256 bits através da fonte. Nós escolhemos 128 bits porque é muito mais rápido e é bastante seguro.
Os argumentos de entrada podem ser de qualquer tamanho. Se
ambos argumentos são NULL
, o resultado
desta função tam bém será NULL
.
Como o AES é um algorítimo de nível de bloco, padding é usado para codificar strings de tamanho ímpares e então a string resultante pode ser calculada como 16*(trunc(tamanho_string/16)+1).
Se AES_DECRYPT()
detectar dados
inválidos ou padding incorreto, ela retorna
NULL
. No entanto, é possível para o
AES_DECRYPT()
retornar um valor
não-NULL
(possivelmente lixo) se os
dados de entrada ou a chave eram inválidos
Você pode usar as funções AES para armazenar dados de forma criptografada modificando as suas consultas:
INSERT INTO t VALUES (1,AES_ENCRYPT('text','password'));
Você pode obter mais segurança não transferindo a chave em suas conexões a cada consulta, o que pode ser conseguido armazenando-o em varáveis do lado do servidor na hora das conexão.
SELECT @password:='my password'; INSERT INTO t VALUES (1,AES_ENCRYPT('text',@password));
AES_ENCRYPT()
e
AES_DECRYPT()
foram adicionados na
versão 4.0.2, e podem ser considerados a função de
criptografia mais segura atualmente disponível no MySQL.
DES_ENCRYPT(string_para_ciptografar [,
(numero_chave | chave_string) ] )
Criptografa a string com a chave dada utilizando o algortimo Triplo-DES.
Note que esta função só funciona se o MySQL tiver sido configurado com suporte a SSL. See Secção 4.4.10, “Usando Conexões Seguras”.
A chave de criptografia utilizada é escolhida da seguinte forma:
Argumento | Descrição |
Somente um argumento | A primeira chave de des-key-file é utilizada. |
Número da chave | A chave dada (0-9) de des-key-file é utilizada. |
string | A chave_string dada será utilizada para criptografar
string_para_criptografar . |
O string retornada será uma string binária onde o
primeiro caracter será CHAR(128 |
número_chave)
.
O 128 é adicionado para facilitar o reconhecimento da
chave de criptografia. Se você usar uma chave string,
numéro_chave
será 127.
Havendo erro, esta função retorna
NULL
.
O tamanho da string para o resultado será
novo_tamanho= tamanho_orig + (8-(tamanho_orig %
8))+1
.
O des-key-file
terá o seguinte
formato:
numero_chave chave_string_des numero_chave chave_string_des
Cada numero_chave
deve ser um núero na
faixa de 0 a 9. As linhas do arquivo podem estar em
qualquer ordem. chave_string_des
é a
string que será usada para criptografar a mensagem. Entre
o número e a chave deve haver pelo menos um espaço. A
primeira chave é a chave padrão que será utilizada se
não for especificada nenhuma chave como argumento para
DES_ENCRYPT()
Você pode dizer ao MySQL para ler novos valores de
arquivos de chave com o comando FLUSH
DES_KEY_FILE
. Isto exige o privilégio
Reload_priv
.
Um benefício de ter um conjunto de chaves padrões é que ele dá a aplicação um modo de verificar a existência de valores criptografados em colunas, sem dar ao usuário final o direito de descriptografar estes valores.
mysql> SELECT endereco_clientes FROM tabela_clientes WHERE
cartao_credito_criptografado = DES_ENCRYPT("numero_cartao_credito");
DES_DECRYPT(string_para_descriptografar [,
chave_string])
Derscritogra uma string criptografada com
DES_ENCRYPT()
.
Note que esta função só funciona se o MySQL tiver sido configurado com suporte SSL. See Secção 4.4.10, “Usando Conexões Seguras”.
Se nenhum argumento chave_string
for
dado, DES_DECRYPT()
examina o primeiro
byte da string criptografada para determinar o número de
chave DES que foi usado para criptografar a string
original, e então lê a chave de
des-key-file
para descriptografar a
mensagem. Para isto funcionar o usuário deve ter o
privilégio SUPER
.
Se você passar para esta função um argumento
chave_string
, aquela string é usada
como a chave para descriptografar a mensagem.
Se a string_para_descriptografar
não
se paracer com uma string criptografada, o MySQL
retornará a
string_para_descriptografar
dada.
Havendo erro, esta função retorna
NULL
.
COMPRESS(string_para_compactar)
Compacta uma string
mysql>SELECT LENGTH(COMPRESS(REPEAT("a",1000)));
-> 21 1 row in set (0.00 sec) mysql>SELECT LENGTH(COMPRESS(""));
-> 0 1 row in set (0.00 sec) mysql>SELECT LENGTH(COMPRESS("a"));
-> 13 1 row in set (0.00 sec) mysql>SELECT LENGTH(COMPRESS(REPEAT("a",16)));
-> 15 1 row in set (0.00 sec)
COMPRESS()
foi adicionado no MySQL
4.1.1. Se exigido, o MySQL tem que ser compilado com uma
biblioteca de compactação como zlib
.
Senão , o valor de retorno é sempre
NULL
.
O conteúdo da string compactada é armazenada da seguinte forma:
Strings vazias são armazenadas como strings vazias
Strings que não estão vazias são armazenadas como
um string descompacatada de 4 byte de tamanho
(low-byte-first) seguida pela string compactada com
gzip. Se a string finaliza com espaço, adicionamos
um ‘.
’ extra para
evitar problemas com o corte do espaço final o
resultado deve ser armazenado em um campo
CHAR
ou
VARCHAR
. O uso de
CHAR
ou
VARCHAR
para armazenar strings
compactadas não é recomendado. É melhor usar uma
coluna BLOB
.
UNCOMPRESS(string_para_descompactar)
Descompacta uma string compactado pela função
COMPRESS()
mysql> select UNCOMPRESS(COMPRESS("any string"));
-> 'any string'
1 row in set (0.00 sec)
UNCOMPRESS()
foi adicionado no MySQL
4.1.1 Se exigido, o MySQL tem que ser compilado com uma
biblioteca de compactação como zlib
.
Senão , o valor de retorno é sempre
NULL
.
UNCOMPRESSED_LENGTH(string_compactada)
Retorna o tamanho da string compactada antes da compactação
mysql> select UNCOMPRESSED_LENGTH(COMPRESS(REPEAT("a",30)));
-> 30
1 row in set (0.00 sec)
UNCOMPRESSED_LENGTH()
foi adicionado no
MySQL 4.1.1
LAST_INSERT_ID([expr])
Retorna o último valor gerado automaticamente que tenha
sido inserido em um coluna
AUTO_INCREMENT
.
mysql> SELECT LAST_INSERT_ID();
-> 195
O último ID que foi gerado e mantido no servidor em uma
base por conexão. Isto significa que o valor que a
função retona para um dado cliente é o valor
AUTO_INCREMENT
gerado mais recentemente
por aquele cliente. O valor não pode ser afetado pelos
outros clientes, mesmo se eles gerarem um valor
AUTO_INCREMENT
deles mesmos. Este
comportamento assegura que você pode recuperar seu
próprio ID sem se preocupar com a atividade de outros
clientes e sem precisar de locks ou transações.
O valor de LAST_INSERT_ID()
não é
alterado se você atualizar uma coluna
AUTO_INCREMENT
de uma linha com um
valor não-mágico (Isto é, um valor que não seja
NULL
e nem 0
).
Se você inserir muitos registros ao mesmo tempo com uma
instrução insert, LAST_INSERT_ID()
retorna o valor da primeira linha inserida. A razão para
isto é tornar possível reproduzir facilmente a mesma
intrução INSERT
em algum outro
servidor.
Se expr
é dado com um argumento para
LAST_INSERT_ID()
, então o valor do
argumento é retornado pela função e é configurado como
o próximo valor para ser retornado pela
LAST_INSERT_ID()
. Isto pode ser útil
para simular sequências:
Primeiro crie a tabela:
mysql>CREATE TABLE sequencia (id INT NOT NULL);
mysql>INSERT INTO sequencia VALUES (0);
Então a tabela pode ser usada para gerar sequência de números como estes:
mysql> UPDATE sequencia SET id=LAST_INSERT_ID(id+1);
Você pode gerar sequências sem chamar
LAST_INSERT_ID()
, mas a utilidade de se
usar a função deste modo é que o valor ID é mantido no
servidor como o último valor gerado automaticamente
(seguro para multi-usurário). Você pode recuperar a nova
ID como você leria qualquer valor
AUTO_INCREMENT
normal no MySQL. Por
exemplo, LAST_INSERT_ID()
(sem um
argmento) retornará a nova ID. A função
mysql_insert_id()
da API C também pode
ser usada para obter o valor.
Note que como mysql_insert_id()
só é
atualizado depois de instruções
INSERT
e UPDATE
,
você não pode utilizar a função da API C para
recuperar o valor para
LAST_INSERT_ID(expr)
depois de executar
outra instrução SQL como SELECT
ou
SET
. See
Secção 12.1.3.32, “mysql_insert_id()
”.
FORMAT(X,D)
Formata o número X
com um format como
'#,###,###.##'
, arredondado para
D
casas decimais, e retorna o resultado
como uma string. Se D
é
0
, o resultado não terá nehum ponto
decimal ou parte fracionária:
mysql>SELECT FORMAT(12332.123456, 4);
-> '12,332.1235' mysql>SELECT FORMAT(12332.1,4);
-> '12,332.1000' mysql>SELECT FORMAT(12332.2,0);
-> '12,332'
VERSION()
Retorna uma string indicando a versão do servidro MySQL:
mysql> SELECT VERSION();
-> '3.23.13-log'
Note que se seu versão finalizar com
-log
, significa que o log está
habilitado.
CONNECTION_ID()
Retorna a identificação (ID da thread) desta conexão. Cada conexão tem seu próprio ID único:
mysql> SELECT CONNECTION_ID();
-> 23786
GET_LOCK(str,temo_limite)
Tenta conseguir uma trava com o nome dado pela string
str
, com um tempo limite de
timeout
segundos. Retorna
1
se o bloqueio foi obtido com sucesso,
0
se o tempo esgotou (por exemplo,
porque outro cliente ja bloqueou o nome), ou
NULL
se uma erro ocorreu (tal como
estouro de memória ou a threado tiver sido finalizada com
mysqladmin kill
). Uma trava é liberada
quando você executa RELEASE_LOCK()
,
executa uma nova GET_LOCK()
, ou a
thread termina. (tanto de forma normal quanto anormal)
Esta função pode ser usada para implementar bloqueio de
aplicação ou para simular registros travados. Nomes são
bloqueados em uma base ampla do servidor. Se um nome foi
bloqueado por um cliente, GET_LOCK()
trava qualquer pedido de bloqueio de outro cliente com o
mesmo nome. Isto permite que clientes que concordam com um
dado nome da trava possam usar a string para realizar
travamento de consultas cooperativas:
mysql>SELECT GET_LOCK("lock1",10);
-> 1 mysql>SELECT IS_FREE_LOCK("lock2");
-> 1 mysql>SELECT GET_LOCK("lock2",10);
-> 1 mysql>SELECT RELEASE_LOCK("lock2");
-> 1 mysql>SELECT RELEASE_LOCK("lock1");
-> NULL
Note que a segunda chamada de
RELEASE_LOCK()
retorna
NULL
porque a trava
"lock1"
foi liberada automaticamente
pela segunda chamada GET_LOCK()
.
RELEASE_LOCK(str)
Libera a trava nomeada pela string str
que foi obtida com GET_LOCK()
. Retorna
1
se a trava foi liberada,
0
se a trava não foi bloquada pela
thread (caso onde a trava não é liberada), e
NULL
se o nome da trava não existe. (A
trava nunca exitirá se ela nunca for obtida pela chamada
de GET_LOCK()
ou se ela ja tiver sido
liberada).
A instrução DO
é conveniente para
ser utilizada com RELEASE_LOCK()
. See
Secção 6.4.10, “Sintaxe DO
”.
IS_FREE_LOCK(str)
Verifica se a trava chamada str
está
livre para ser utilizada (ex. não está bloqueada).
Retorna 1
se a trava está liver
(ninguém a esta usando), 0
se a trava
está em uso, e NULL
caso ocorra erro
(como argumentos incorretos).
BENCHMARK(cont,expr)
A função BENCHMARK()
executa a
expressão expr
repetidamente
cont
vezes. Ela pode ser usada para
medir a velocidade em que o MySQL processa a expressão. O
valor resultante é sempre 0
. A
intenção é usá-la no clientei
mysql
, relatando o tempo de execução
da consulta:
mysql> SELECT BENCHMARK(1000000,ENCODE("hello","goodbye"));
+----------------------------------------------+
| BENCHMARK(1000000,ENCODE("hello","goodbye")) |
+----------------------------------------------+
| 0 |
+----------------------------------------------+
1 row in set (4.74 sec)
O tempo relatado é o tempo decorrido no cliente, não o
tempo de CPU no servidor. Pode ser aconselhável executar
BENCHMARK()
diversas vezes e
interpretar o resultado cosiderado o peso da carga da
maquina servidora.
INET_NTOA(expr)
Dado um endereço numérico de rede (4 ou 8 bytes), retorna a representacão no formato com pontos do endereço como uma string:
mysql> SELECT INET_NTOA(3520061480);
-> "209.207.224.40"
INET_ATON(expr)
Dada a represenação com pontos de um endereço de rede como uma string, retorna um inteiro que representa o valor numérico deste endereço. Endereços podem ter 4 ou 8 bytes de endereçamento:
mysql> SELECT INET_ATON("209.207.224.40");
-> 3520061480
O número gerado é sempre na ordem de bytes da rede; por
exemplo o número acima é calculado como
209*256^3 + 207*256^2 + 224*256 +40
.
MASTER_POS_WAIT(nome_log, log_pos [,
tempo_limite])
Envia blocos o slave alcançar (ex.: ter lido e aplicado
todas as atualizações) a posição específica no log
master. Se a informação master não está inicializada,
ou se os argumentos estão incorretos, retorna
NULL
. Se o slave não está em
execução, enviará blocos e irá esperar até que ele
seja iniciado e vá para (ou passe por) a posição
especificada. Se o slave já passou pela posição
especificada, retorna imediatamente.
Se tempo_limite
(novo na versão
4.0.10) é especificado, irá esperar até que
tempo_limite
segundos tenham se
passado. tempo_limite
deve ser maior
que 0; zero ou um tempo_limite
negativo
significa sem tempo_limite. O valor de retorno é o
número de eventos de log que ele tem que esperar para
obter a posição especificada, NULL
no
caso de erro, ou -1
se o tempo_limite
tiver sido excedido.
O comando é útil para controle de sincronização mo master/slave.
FOUND_ROWS()
Uma instrução SELECT
pode incluir uma
cláusula LIMIT
para restringir o
número de linhas que o servidor retorna para um cliente.
Em alguns casos, é desejável saber quantas linhas a
instrução teria retornado sem o
LIMIT
, mas sem executar a instrução
novamente. Para obter esta contagem de linhas, inclua uma
opção SQL_CALC_FOUND_ROWS
na
instrução SELECT
, então chame
FOUND_ROWS()
loga depois:
mysql>SELECT SQL_CALC_FOUND_ROWS * FROM nome_tabela
WHERE id > 100 LIMIT 10; mysql>SELECT FOUND_ROWS();
O segundo SELECT
irá retornar um
número indicando quantas linhas o primeiro
SELECT
teria retornado se ele fosse
escrito sem a cláusula LIMIT
. (Se o
instrução SELECT
anterior não inclui
a opção SQL_CALC_FOUND_ROWS
, então
FOUND_ROWS()
pode retornar um resultado
diferente quando LIMIT
é usado daquele
que não é usado).
Note que se você estiver usando SELECT
SQL_CALC_FOUND_ROWS ...
, o MySQL tem que
calcular quantos registros existem em todo o conjunto de
resultados. No entanto, isto é mais rápido que se você
não utilizar LIMIT
, já que o
resultado precisa ser enviado ao cliente.
SQL_CALC_FOUND_ROWS
e
FOUND_ROWS()
podem ser úteis em
situações em que você queira restringir o número de
registros que uma consulta retorna, mas também determinar
o número de linhas em todo o resultado sem executar a
consulta novamente. Um exemplo é um script web que
apresenta um display paginado contendo links para as
páginas que mostram outras seções de um resultado de
busca. Usar FOUND_ROWS()
lhe permite
determinar quantos outras páginas são necessárias para
o resto do resultado.
O uso de SQL_CALC_FOUND_ROWS
e
FOUND_ROWS()
é mais complexa para
consultas UNION
que para instruções
SELECT
simples, porque
LIMIT
pode ocorrer em vários lugares
em um UNION
. Ele pode ser aplicado a
instruções SELECT
individuais no
UNION
, ou globais ao resultado
UNION
como um todo.
A intenção de SQL_CALC_FOUND_ROWS
para UNION
é que ele deve retornar a
contagem das linhas que seriam retornadas sem um
LIMIT
global. As consições para uso
de SQL_CALC_FOUND_ROWS
com
UNION
são:
A palavra chave
SQL_CALC_FOUND_ROWS
deve aparecer
na primeira SELECT
do
UNION
.
O valor de FOUND_ROWS()
é exato
apenas se UNION ALL
for usado. Se
UNION
sem ALL
for usado, as duplicatas são removidas e o valor de
FOUND_ROWS()
é apenas
aproximado.
Se nenhum LIMIT
está presente no
UNION
,
SQL_CALC_FOUND_ROWS
é ignorado e
retorna o número de linhas na tabela temporária
que é criada para processar o
UNION
.
SQL_CALC_FOUND_ROWS
e
FOUND_ROWS()
estão disponíveis a
partir da versão 4.0.0 do MySQL.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.