O que são funções?
O MySQL pode fazer muito mais do que apenas armazenar e recuperar dados . Também podemos realizar manipulações nos dados antes de recuperá-los ou salvá-los. É aí que entram as Funções do MySQL. Funções são simplesmente pedaços de código que realizam algumas operações e, em seguida, retornam um resultado. Algumas funções aceitam parâmetros, enquanto outras funções não aceitam parâmetros.
Vejamos brevemente um exemplo de função MySQL. Por padrão, o MySQL salva tipos de dados de data no formato "AAAA-MM-DD". Suponha que construímos um aplicativo e nossos usuários desejam que a data seja retornada no formato "DD-MM-AAAA", podemos usar a função integrada DATE_FORMAT do MySQL para fazer isso. DATE_FORMAT é uma das funções mais usadas no MySQL. Vamos examiná-lo com mais detalhes à medida que desenvolvermos a lição.
Por que usar funções?
Com base no exemplo dado na introdução, pessoas com experiência em programação de computadores podem estar pensando "Por que incomodar as funções do MySQL? O mesmo efeito pode ser alcançado com a linguagem de script / programação?" É verdade que podemos conseguir isso escrevendo alguns procedimentos / funções no programa de aplicação.
Voltando ao nosso exemplo DATE na introdução, para que nossos usuários obtenham os dados no formato desejado, a camada de negócios terá que fazer o processamento necessário.
Isso se torna um problema quando o aplicativo precisa se integrar a outros sistemas. Quando usamos funções MySQL, como DATE_FORMAT, podemos ter essa funcionalidade embutida no banco de dados e qualquer aplicativo que precise dos dados os obtém no formato necessário. Isso reduz o retrabalho na lógica de negócios e reduz as inconsistências de dados.
Outra razão pela qual devemos considerar o uso de funções MySQL é o fato de que pode ajudar a reduzir o tráfego de rede em aplicativos cliente / servidor . A camada de negócios precisará apenas fazer chamadas para as funções armazenadas, sem a necessidade de manipular os dados. Em média, o uso de funções pode ajudar a melhorar muito o desempenho geral do sistema.
Tipos de funções
Funções integradas
O MySQL vem com várias funções integradas. Funções embutidas são simplesmente funções já implementadas no servidor MySQL. Essas funções nos permitem realizar diferentes tipos de manipulações nos dados. As funções integradas podem ser basicamente categorizadas nas seguintes categorias mais utilizadas.
- Funções de strings - operam em tipos de dados de string
- Funções numéricas - operam em tipos de dados numéricos
- Funções de data - operam em tipos de dados de data
- Funções agregadas - operam em todos os tipos de dados acima e produzem conjuntos de resultados resumidos.
- Outras funções - o MySQL também oferece suporte a outros tipos de funções integradas, mas limitaremos nossa lição apenas às funções nomeadas acima.
Vamos agora examinar cada uma das funções mencionadas acima em detalhes. Explicaremos as funções mais utilizadas através do nosso "Myflixdb".
Funções de string
Já vimos o que as funções de string fazem. Veremos um exemplo prático que os usa. Em nossa tabela de filmes, os títulos dos filmes são armazenados usando combinações de letras maiúsculas e minúsculas. Suponha que desejamos obter uma lista de consulta que retorna os títulos dos filmes em letras maiúsculas. Podemos usar a função "UCASE" para fazer isso. Ele recebe uma string como parâmetro e converte todas as letras em maiúsculas. O script mostrado abaixo demonstra o uso da função "UCASE".
SELECT `movie_id`,`title`, UCASE(`title`) FROM `movies`;
AQUI
- UCASE (`title`) é a função incorporada que recebe o título como um parâmetro e o retorna em letras maiúsculas com o nome alternativo` upper_case_title`.
A execução do script acima no ambiente de trabalho MySQL no Myflixdb nos dá os seguintes resultados mostrados abaixo.
movie_id | title | UCASE('title') |
---|---|---|
16 | 67% Guilty | 67% GUILTY |
6 | Angels and Demons | ANGELS AND DEMONS |
4 | Code Name Black | CODE NAME BLACK |
5 | Daddy's Little Girls | DADDY'S LITTLE GIRLS |
7 | Davinci Code | DAVINCI CODE |
2 | Forgetting Sarah Marshal | FORGETTING SARAH MARSHAL |
9 | Honey mooners | HONEY MOONERS |
19 | movie 3 | MOVIE 3 |
1 | Pirates of the Caribean 4 | PIRATES OF THE CARIBEAN 4 |
18 | sample movie | SAMPLE MOVIE |
17 | The Great Dictator | THE GREAT DICTATOR |
3 | X-Men | X-MEN |
O MySQL oferece suporte a várias funções de string. Para obter uma lista completa de todas as funções de string incorporadas, consulte este link http://dev.mysql.com/doc/refman/5.0/en/string-functions.html no site do MySQL.
Funções numéricas
Conforme mencionado anteriormente, essas funções operam em tipos de dados numéricos. Podemos realizar cálculos matemáticos em dados numéricos nas instruções SQL.
Operadores aritemáticos
O MySQL suporta os seguintes operadores aritmáticos que podem ser usados para realizar cálculos nas instruções SQL.
Nome |
Descrição |
---|---|
DIV |
Divisão inteira |
/ |
Divisão |
- |
Subtração |
+ |
Adição |
* |
Multiplicação |
% ou MOD |
Módulo |
Vejamos agora exemplos de cada um dos operadores acima
Divisão Inteira (DIV)
SELECT 23 DIV 6 ;
Executar o script acima nos dá os seguintes resultados.
3
Operador de divisão (/)
Vejamos agora o exemplo do operador de divisão. Vamos modificar o exemplo DIV.
SELECT 23 / 6 ;
Executar o script acima nos dá os seguintes resultados.
3,8333
Operador de subtração (-)
Vejamos agora o exemplo do operador de subtração. Usaremos os mesmos valores dos dois exemplos anteriores
SELECT 23 - 6 ;
Executar o script acima nos dá 17
Operador de adição (+)
Vejamos agora o exemplo do operador de adição. Vamos modificar o exemplo anterior.
SELECT 23 + 6 ;
Executar o script acima nos dá 29
Operador de multiplicação (*)
Vejamos agora o exemplo do operador de multiplicação. Usaremos os mesmos valores dos exemplos anteriores.
SELECT 23 * 6 AS `multiplication_result`;
Executar o script acima nos dá os seguintes resultados.
multiplication_result |
138 |
Operador módulo (-)
O operador módulo divide N por M e nos dá o resto. Vejamos agora o exemplo do operador de módulo. Usaremos os mesmos valores dos exemplos anteriores.
SELECT 23 % 6 ;
OU
SELECT 23 MOD 6 ;
Executar o script acima nos dá 5
Vejamos agora algumas das funções numéricas comuns no MySQL.
Floor - esta função remove casas decimais de um número e o arredonda para o menor número mais próximo. O script mostrado abaixo demonstra seu uso.
SELECT FLOOR(23 / 6) AS `floor_result`;
Executar o script acima nos dá os seguintes resultados.
Floor_result |
3 |
Arredondar - esta função arredonda um número com casas decimais para o número inteiro mais próximo. O script mostrado abaixo demonstra seu uso.
SELECT ROUND(23 / 6) AS `round_result`;
Executar o script acima nos dá os seguintes resultados.
Round_result |
4 |
Rand - esta função é usada para gerar um número aleatório, seu valor muda toda vez que a função é chamada. O script mostrado abaixo demonstra seu uso.
SELECT RAND() AS `random_result`;
Funções armazenadas
As funções armazenadas são semelhantes às funções integradas, exceto que você mesmo precisa definir a função armazenada. Depois que uma função armazenada é criada, ela pode ser usada em instruções SQL como qualquer outra função. A sintaxe básica para criar uma função armazenada é mostrada abaixo
CREATE FUNCTION sf_name ([parameter(s)])RETURNS data typeDETERMINISTICSTATEMENTS
AQUI
- "CREATE FUNCTION sf_name ([parameter (s)])" é obrigatório e diz ao servidor MySQL para criar uma função chamada `sf_name 'com parâmetros opcionais definidos entre parênteses.
- "Tipo de dados RETURNS" é obrigatório e especifica o tipo de dados que a função deve retornar.
- "DETERMINISTIC" significa que a função retornará os mesmos valores se os mesmos argumentos forem fornecidos a ela.
- "STATEMENTS" é o código procedural que a função executa.
Vejamos agora um exemplo prático que implementa uma função incorporada. Suponha que queremos saber quais filmes alugados passaram da data de devolução. Podemos criar uma função armazenada que aceita a data de retorno como parâmetro e depois a compara com a data atual no servidor MySQL. Se a data atual for inferior à data de retorno do filme, retornamos "Não", caso contrário, retornamos "Sim". O script mostrado abaixo nos ajuda a conseguir isso.
DELIMITER |CREATE FUNCTION sf_past_movie_return_date (return_date DATE)RETURNS VARCHAR(3)DETERMINISTICBEGINDECLARE sf_value VARCHAR(3);IF curdate() > return_dateTHEN SET sf_value = 'Yes';ELSEIF curdate() <= return_dateTHEN SET sf_value = 'No';END IF;RETURN sf_value;END|
A execução do script acima criou a função armazenada `sf_past_movie_return_date`.
Vamos agora testar nossa função armazenada.
SELECT `movie_id`,`membership_number`,`return_date`,CURDATE() ,sf_past_movie_return_date(`return_date`) FROM `movierentals`;
Executar o script acima no ambiente de trabalho MySQL no myflixdb nos dá os seguintes resultados.
movie_id | membership_number | return_date | CURDATE() | sf_past_movie_return_date('return_date') |
---|---|---|---|---|
1 | 1 | NULL | 04-08-2012 | NULL |
2 | 1 | 25-06-2012 | 04-08-2012 | yes |
2 | 3 | 25-06-2012 | 04-08-2012 | yes |
2 | 2 | 25-06-2012 | 04-08-2012 | yes |
3 | 3 | NULL | 04-08-2012 | NULL |
Funções definidas pelo usuário
O MySQL também oferece suporte a funções definidas pelo usuário que estendem o MySQL. Funções definidas pelo usuário são funções que você pode criar usando uma linguagem de programação como C, C ++ etc. e, em seguida, adicioná-las ao servidor MySQL. Depois de adicionados, eles podem ser usados como qualquer outra função.
Resumo
- As funções nos permitem aprimorar os recursos do MySQL.
- As funções sempre retornam um valor e podem, opcionalmente, aceitar parâmetros.
- Funções integradas são funções fornecidas com o MySQL. Eles podem ser categorizados de acordo com os tipos de dados em que operam, ou seja, strings, datas e funções numéricas incorporadas.
- As funções armazenadas são criadas pelo usuário no servidor MySQL e podem ser usadas em instruções SQL.
- As funções definidas pelo usuário são criadas fora do MySQL e podem ser incorporadas ao servidor MySQL.