Artigo Diretório
-
- Introdução aos procedimentos armazenados
- Procedimentos armazenados em MySQL
- variável
- Gerenciamento de procedimentos armazenados
-
- Mostrar procedimento armazenado
- Exibir os procedimentos armazenados de um banco de dados específico
- Para exibir procedimentos armazenados em um modo específico, é necessário exibir procedimentos armazenados com "meu" no nome
- Exibir o código-fonte do procedimento armazenado "mypro1"
- Exclua o procedimento armazenado "mypro1"
Introdução aos procedimentos armazenados
Por que usar procedimentos armazenados?
A versão 5.0 do MySQL passou a oferecer suporte a procedimentos armazenados.
A maioria das instruções SQL são instruções únicas em uma ou mais tabelas. Nem todas as operações são tão simples. Freqüentemente, uma operação completa requer várias instruções para ser concluída.
Simplificando, um procedimento armazenado é uma coleção de uma ou mais instruções MySQL que são salvas para uso posterior. Pense nisso como um arquivo em lote. Embora sua função não se limite ao processamento em lote.
O procedimento armazenado é muito simples em pensamento, ou seja, encapsulamento de código e reutilização no nível da linguagem SQL do banco de dados.
Vantagens de procedimentos armazenados
- Simplifique operações complexas encapsulando o processamento em unidades fáceis de usar;
- Simplifique o gerenciamento de mudanças. Se o nome da tabela, o nome da coluna ou a lógica de negócios forem alterados. Basta alterar o código do procedimento armazenado, as pessoas que o utilizam não alterarão o seu próprio código;
- Normalmente, os procedimentos armazenados ajudam a melhorar o desempenho do aplicativo. Quando o procedimento armazenado criado é compilado, ele é armazenado no banco de dados. No entanto, os procedimentos armazenados implementados pelo MySQL são ligeiramente diferentes. Os procedimentos armazenados do MySQL são compilados sob demanda. Após compilar o procedimento armazenado, o MySQL o coloca no cache. O MySQL mantém seu próprio cache de procedimento armazenado para cada conexão. Se o aplicativo usar o procedimento armazenado várias vezes em uma única conexão, use a versão compilada, caso contrário, o procedimento armazenado funcionará como uma consulta;
- Os procedimentos armazenados ajudam a reduzir o tráfego entre o aplicativo e o servidor de banco de dados, porque o aplicativo não precisa enviar várias instruções SQL longas, mas apenas o nome e os parâmetros do procedimento armazenado;
- O programa armazenado é reutilizável e transparente para qualquer aplicativo. O procedimento armazenado expõe a interface do banco de dados a todos os aplicativos, para que os desenvolvedores não precisem desenvolver as funções com suporte no procedimento armazenado;
- O programa armazenado é seguro. Os administradores de banco de dados podem conceder permissões apropriadas a aplicativos que acessam procedimentos armazenados no banco de dados sem fornecer nenhuma permissão às tabelas de banco de dados subjacentes.
Desvantagens dos procedimentos armazenados
- Se um grande número de procedimentos armazenados for usado, o uso de memória de cada conexão que usa esses procedimentos armazenados aumentará muito. Além disso, se você usar demais um grande número de operações lógicas no processo de armazenamento, o uso da CPU também aumentará, porque o design inicial do banco de dados MySQL se concentra em consultas eficientes, o que não conduz a operações lógicas;
- A estrutura de procedimentos armazenados torna mais difícil desenvolver procedimentos armazenados com lógica de negócios complexa;
- É difícil depurar procedimentos armazenados. Apenas alguns sistemas de gerenciamento de banco de dados permitem depurar procedimentos armazenados. Infelizmente, o MySQL não fornece a capacidade de depurar procedimentos armazenados;
- Não é fácil desenvolver e manter procedimentos armazenados. O desenvolvimento e a manutenção de procedimentos armazenados geralmente requerem uma habilidade profissional que nem todos os desenvolvedores de aplicativos possuem. Isso pode causar problemas na fase de desenvolvimento e manutenção do aplicativo.
Procedimentos armazenados em MySQL
Criar e chamar procedimentos
Crie um procedimento armazenado, o código é o seguinte:
-- 创建存储过程
create procedure mypro(in a int,in b int,out sum int)
begin
set sum = a+b;
end;
Os resultados são os seguintes
Você também pode visualizar o processo no nó "Função" do cliente Navicat, conforme mostrado na figura abaixo:
Chame o procedimento armazenado, o código é o seguinte:
call mypro(1,2,@s);-- 调用存储过程
select @s;-- 显示过程输出结果
resultado da operação
Análise de sintaxe de procedimento armazenado
create procedure
Usado para criar o processo;mypro
Usado para definir o nome do processo;(in a int,in b int,out sum int)
Parâmetro representa o processo no qualin
denota um parâmetro de entrada,out
indica um parâmetro de saída. Semelhante aos parâmetros formais e valor de retorno quando Java define um método;begin
Eend
representa o início e o fim do corpo principal do processo, o que equivale a um par de chaves em um método de definição Java;call
Usada para chamar o processo,@s
é a variável usada para receber os parâmetros de saída do processo
Parâmetros do procedimento armazenado
Os parâmetros do procedimento armazenado do MySQL são usados na definição do procedimento armazenado. Existem três tipos de parâmetros:
IN
Parâmetro de entrada: indica que o chamador passa um valor para o procedimento (o valor de entrada pode ser um literal ou variável);OUT
Parâmetro de saída: indica que o processo envia um valor ao chamador (vários valores podem ser retornados) (o valor de saída só pode ser uma variável);INOUT
Parâmetros de entrada e saída: não significa apenas que o chamador passa um valor para o processo, mas também significa que o processo passa um valor para o chamador (os valores só podem ser variáveis).
Os procedimentos armazenados podem ser divididos em quatro categorias de acordo com os parâmetros:
1) Processo sem parâmetros;
2) .Somente o processo de entrada de parâmetros;
3). Apenas o processo de parâmetros de saída;
4) Processo incluindo parâmetros de entrada e saída.
variável
O procedimento armazenado no MySQL é semelhante ao método em java.
Nesse caso, as variáveis também podem ser usadas em procedimentos armazenados. O escopo da variável local em java é o método onde a variável está localizada, e o escopo da variável local no MySQL é o procedimento armazenado onde ela está localizada.
Definições de variáveis
DECLARE variable_name [,variable_name...] datatype [DEFAULT value];
-
declare
Usado para declarar variáveis; -
variable_name
Representa o nome da variável; -
datatype
É o tipo de dados do MySQL; -
default
Usado para declarar valores padrão; -
Por exemplo:
declare name varchar(20) default ‘jack’。
Atribuição de variável
SET 变量名 = 表达式值 [,variable_name = expression ...]
Use variáveis no procedimento armazenado, o código é o seguinte
use schooldb;-- 使用 schooldb 数据库
-- 创建过程
create procedure mypro1()
begin
declare name varchar(20);
set name = '丘处机';
select * from studentinfo where studentname = name;
end;
-- 调用过程
call mypro1();
resultado da operação
Declaração de controle de fluxo
se declaração condicional
IF
A declaração contém vários julgamentos condicionais. De acordo com o resultado TRUE
, FALSE
a declaração é executada if
, else if
que é else
semelhante à sintaxe de ,, e em linguagens de programação .
Defina um procedimento armazenado, insira um número inteiro e use a instrução if para determinar se é positivo ou negativo. O código é o seguinte:
-- 创建过程
create procedure mypro2(in num int)
begin
if num<0 then -- 条件开始
select '负数';
elseif num=0 then
select '不是正数也不是负数';
else
select '正数';
end if;-- 条件结束
end;
-- 调用过程
call mypro2(-1);
resultado da operação
declaração condicional de caso
case
É uma outra instrução condicional, similar à linguagem de programação choose
, when
sintaxe. Na case
instrução MySQL tem dois
formatos de sintaxe .
Defina um procedimento armazenado, insira um número inteiro e use a instrução case para determinar se é positivo ou negativo. O código é o seguinte:
-- 创建过程
create procedure mypro3(in num int)
begin
case -- 条件开始
when num<0 then select '负数';
when num=0 then select '不是正数也不是负数';
else select '正数';
end case; -- 条件结束
end;
-- 调用过程
call mypro3(1);
resultado da operação
Defina um procedimento armazenado, insira um número inteiro e use a instrução case para determinar se é 1 ou 2. O código é o seguinte:
-- 创建过程
create procedure mypro4(in num int)
begin
case num -- 条件开始
when 1 then select '数值是 1';
when 2 then select '数值是 2';
else select '不是 1 也不是 2';
end case; -- 条件结束
end;
-- 调用过程
call mypro4(3);
resultado da operação
Ambas as gramáticas de caso podem alcançar julgamento condicional, mas a primeira é adequada para julgamento de valor de intervalo e a segunda é adequada para julgamento de valor definido.
instrução while loop
while
Declaração de uso e java
em while
um ciclo semelhante.
Defina um procedimento armazenado e use um loop while para gerar a soma cumulativa de 1 a 10. O código é o seguinte:
-- 创建过程
create procedure mypro5(out sum int)
begin
declare num int default 0;
set sum = 0;
while num<10 do -- 循环开始
set num = num+1;
set sum = sum+num;
end while; -- 循环结束
end;
-- 调用过程
call mypro5(@sum);
-- 查询变量值
select @sum;
resultado da operação
repetir instrução de loop
repeat
Uso e instruções java
na do…while
instrução, as operações são o primeiro ciclo de execução, então a condição de determinação, a diferença entre repeat
a expressão da
fórmula é false
apenas executado loops até que o valor da expressão true
seja interrompido.
Defina um procedimento armazenado e use um loop de repetição para gerar a soma cumulativa de 1 a 10. O código é o seguinte:
-- 创建过程
create procedure mypro6(out sum int)
begin
declare num int default 0;
set sum = 0;
repeat-- 循环开始
set num = num+1;
set sum = sum+num;
until num>=10
end repeat; -- 循环结束
end;
-- 调用过程
call mypro6(@sum);
-- 查询变量值
select @sum;
resultado da operação
declaração de loop
As instruções de loop são usadas para executar certas instruções repetidamente.
Pode ser usado durante a leave
instrução de execução ou iterate
fora do loop pode ser aninhado IF
como uma instrução de julgamento.
leave
O efeito da instrução é equivalente ao de java,break
que é usado para encerrar o loop;iterate
O efeito da instrução é equivalente ao de java,continue
que é usado para encerrar esta operação de loop e entrar no próximo loop.
Defina um procedimento armazenado e use o loop para gerar a soma cumulativa de 1 a 10. O código é o seguinte:
-- 创建过程
create procedure mypro7(out sum int)
begin
declare num int default 0;
set sum = 0;
loop_sum:loop-- 循环开始
set num = num+1;
set sum = sum+num;
if num>=10 then
leave loop_sum;
end if;
end loop loop_sum; -- 循环结束
end;
-- 调用过程
call mypro7(@sum);
-- 查询变量值
select @sum;
resultado da operação
O loop_sum no código é equivalente a rotular o loop para facilitar a operação flexível durante vários loops.
Gerenciamento de procedimentos armazenados
O gerenciamento do processo de armazenamento inclui principalmente: exibir o processo, exibir o código-fonte do processo e excluir o processo.
A forma mais simples é utilizar a ferramenta cliente Navicat para gerenciamento, basta clicar com o mouse, conforme mostrado na figura abaixo:
Mostrar procedimento armazenado
SHOW PROCEDURE STATUS;
Exibir os procedimentos armazenados de um banco de dados específico
SHOW PROCEDURE status where db = 'schooldb';
Para exibir procedimentos armazenados em um modo específico, é necessário exibir procedimentos armazenados com "meu" no nome
SHOW PROCEDURE status where name like '%my%';
Exibir o código-fonte do procedimento armazenado "mypro1"
SHOW CREATE PROCEDURE mypro1;
Exclua o procedimento armazenado "mypro1"
drop PROCEDURE mypro1;